zoukankan      html  css  js  c++  java
  • WPF Invoke和BeginInvoke

    在WPF中Invoke和BeginInvoke和Winform中的是差不多的,只是一个用Control的一个用Dispatcher的。

    而Invoke和BeginInvoke的区别嘛 就是一个是同步的一个是异步的,也就是一个需要等待一个不需要= =

    就比如一个最简单区别的例子:

    //这个输出123
            private void button1_Click(object sender, RoutedEventArgs e) {
                textblock.Text += "1";
                this.Dispatcher.Invoke(new InvokeDelegate(Test));
                textblock.Text += "3";
            }
    
            private void Test() {
                textblock.Text += "2";
            }
    
            private delegate void InvokeDelegate();
    
    //这个输出132
            private void button1_Click(object sender, RoutedEventArgs e) {
                textblock.Text += "1";
                this.Dispatcher.BeginInvoke(new InvokeDelegate(Test));
                textblock.Text += "3";
            }
    
            private void Test() {
                textblock.Text += "2";
            }
    View Code

    Invoke是线程中比较重要的一个东西,在多线程的编程中,平常在更新界面的时候,可以用UI线程去做来减轻工作线程的负担。比如下面这样放在线程中:

    private void button1_Click(object sender, RoutedEventArgs e) {
                Thread invokeThread = new Thread(new ThreadStart(Method));
                invokeThread.Start();
                //...运算代码
            }
    
            private void Method(){
                this.Dispatcher.BeginInvoke(new InvokeDelegate(Test));
            }
    
            private void Test() {
                textblock.Text += "123";
            }
    
            private delegate void InvokeDelegate();
    View Code

    或者觉得这样写比较烦的话嘛,就可以直接这样写:

    private void button_Click(object sender, RoutedEventArgs e) {
                this.Dispatcher.BeginInvoke(new Action(() => { this.textblock.Text += "123"; }));
            }
    View Code
  • 相关阅读:
    线程池
    队列Queue、栈LifoQueue、优先级队列PriorityQueue
    线程的定时器Timer
    线程的条件Condiition
    线程的信号量Semaphore
    死锁的原因及解决办法RLock递归锁
    线程锁Lock
    守护线程daemon
    threding模块的其他用法
    变量的存储方式和生存期
  • 原文地址:https://www.cnblogs.com/socialdk/p/3405612.html
Copyright © 2011-2022 走看看