• WPF Invoke与BeginInvoke的区别


    • Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。
    • Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。

        就是一个是同步的一个是异步的,也就是一个需要等待一个不需要等待

    复制代码
    //这个输出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";
            }
    复制代码

    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();
    复制代码

    简单写法如下:

    private void button_Click(object sender, RoutedEventArgs e) {
                this.Dispatcher.BeginInvoke(new Action(() => { this.textblock.Text += "123"; }));
            }
  • 相关阅读:
    ACE 的一些词汇
    odbc连接不上,初步猜想是myodbc安装有问题
    1分钟 当数据库管理员
    硬件申请
    编译删除
    ASP.NET之数据绑定
    发布、订阅、复制、同步SQL Server 2000 数据库
    SQL——添加约束的语句
    SQL——规则
    十大著名黑客—— 凯文米特尼克
  • 原文地址:https://www.cnblogs.com/Jeely/p/11043865.html
Copyright © 2020-2023  润新知