[转]C# Invoke的使用方法
2015-08-17 18:30
591 查看
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。
再举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox..
原文:http://www.cnblogs.com/lovko/archive/2008/12/19/1358748.html
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 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; }
原文:http://www.cnblogs.com/lovko/archive/2008/12/19/1358748.html
相关文章推荐
- [转载]C#控制台应用程序里调用自己写的函数的方法
- C#查看各种变量的指针地址
- 编写高质量代码改善C#程序的157个建议——建议60:重新引发异常时使用Inner Exception
- C#方法的封装
- 转:C# DataGridView控件清空数据出错解决方法
- 编写高质量代码改善C#程序的157个建议——建议59:不要在不恰当的场合下引发异常
- C#读写文件
- c# 获取路径的几种方法
- 可视化对比十多种排序算法(C#版)
- C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标(转)
- C# 中的IOCP线程池
- C# 中的IOCP线程池
- 编写高质量代码改善C#程序的157个建议——建议58:用抛出异常代替返回错误代码
- C# String与string的区别 以及 C# Swap string
- C#应用程序只允许运行一个实例,多次运行的时候激活当前实例,显示其界面
- ChartServer
- C# 模仿QQ右下角 消息闪烁提示
- C#
- 转载C#中Trim()、TrimStart()、TrimEnd()的用法
- C# Dictionary增加的方法