(31条消息) C#多线程 Invoke方法的使用收藏

在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。

正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。

而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。

再举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox..

using System.Threading;

public delegate void MyInvoke(string str);

private void btnStartThread_Click(object sender, EventArgs e)         {            
            Thread thread = new Thread(new ThreadStart(DoWord));
            thread.Start();        
                             }

public void DoWord()  {

MyInvoke mi = new MyInvoke(SetTxt);

BeginInvoke(mi,new object[]{"abc"}); 
                       }

public void SetTxt(string str)
        {
            txtReceive.Text += str + System.Environment.NewLine;
        }

(0)

相关推荐

  • C# this.Invoke()的作用与用法

    Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); 在多线程编程中,我们经常要在工作线程中去 ...

  • c#多线程通信之委托事件

    在研究c# 线程之间通信时,发现传统的方法大概有三种: 全局变量,由于同一进程下的多个进程之间共享数据空间,所以使用全局变量是最简单的方法,但要记住使用volatile进行限制. 线程之间发送消息(这 ...

  • (31条消息) 公司名称有哪些要求?注册公司名称的条件是什么?

    公司名称对一个公司来说是非常重要的,关乎企业在业界的发展和名声传播,所以选择一个好的公司名称是至关重要的,那么对于公司名称有哪些要求?注册公司名称的条件是什么? 一.注册公司名称的具体要求是什么? 1 ...

  • (31条消息) 微博爬虫之:无需账号获取微博weibo的Cookie

    这里主要演示原理,不涉及具体的编程代码,工具:Postman,主要3个步骤:  第1步(获取tid): 网址:https://passport.weibo.com/visitor/genvisitor ...

  • (31条消息) CentOS7 Yum安装php73

    (31条消息) CentOS7 Yum安装php73

  • (3条消息) LR 类分析方法总结

    文章目录 LR 类分析方法相关定义 LR 类分析法的基本思想和工作过程 LR 分析表 LR 驱动程序 LR 分析法的关键问题 可归前缀的判断 确定句柄 LR(0) 分析法 LR(0) 分析法基本概念 ...

  • (1条消息) python多线程

    Python多线程多进程 文章目录 并行和并发的概念 线程和进程的概念(来点八股文) PythonGIL锁相关以及历史 多线程编程详解 多进程编程详解(重点) 一.什么是并行和并发? 首先我们来先说一 ...

  • (12条消息) 常用的魔法方法

    魔法方法 __dict__动态绑定属性 __enter__和__exit__用来生成上下文管理器 __get__与__set__属性描述符-----给类属性添加控制条件 __getattr__与__g ...

  • (2条消息) PSTools工具使用方法

    PSTools工具使用方法 Finder_Way 2018-12-24 10:50:45 7331 收藏 2 分类专栏: 系统运维 Dos 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...

  • 31个有效“预防高血压”的方法!记得收藏!

    高血压是最常见的慢性病,每三个人中可能就有一个高血压患者,但大多数人对此却毫不知情.众所周知,高血压是心脏病和中风的重要危险因素.根据2015年<中国居民营养与慢性病状况报告>显示[2], ...

  • (7条消息) C++中位运算的使用方法

    一:简介1 位逻辑运算符:& (位   "与")  and^  (位   "异或")|   (位    "或")   or~  (位 ...