转载▼
转自:http://blog.3snews.net/html/30/34530-27563.html

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

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

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

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

using System.Threading;

//启动一个线程 
Thread thread=new Thread(new ThreadStart(DoWork)); 
thread.Start();

//线程方法 
private void DoWork() 

this.TextBox1.Text="我是一个文本框"; 
}

如果你像上面操作,在VS2005或2008里是会有异常的...

正确的做法是用Invoke\BeginInvoke

using System.Threading;
namespace test
{
public partial class Form1 : Form
{
public delegate void MyInvoke(string str1,string str2);
public Form1()
{
InitializeComponent();

}
public void DoWork()
{
MyInvoke mi = new MyInvoke(UpdateForm);
this.BeginInvoke(mi, new Object[] {"我是文本框","haha"});
}
public void UpdateForm(string param1,string parm2)
{
this.textBox1.Text = param1+parm2;
}
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWork));
thread.Start();
}
}
}
注意代理的使用!

C#中Invoke的用法(转)相关推荐

  1. C#中Invoke的用法

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫"打开",单击之后按钮上的文本显示 ...

  2. 【转】C#中Invoke的用法

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

  3. C#中Invoke的用法()

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

  4. .Net基础——程序集与CIL HttpClient封装方法 .Net Core 编码规范 C#中invoke和beginInvoke的使用 WebServeice 动态代理类...

    .Net基础--程序集与CIL 1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll则需 ...

  5. mysql中change用法,mysql 中alter的用法以及一些步骤

    mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...

  6. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  7. 【C++】C/C++ 中 static 的用法全局变量与局部变量

    C/C++ 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C++ 中static的作用 2.1 总的 ...

  8. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  9. python中str的index什么意思_python中index的用法是什么

    index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...

最新文章

  1. C++20 - 下一个大版本功能确定
  2. Java在游戏服务器开发中的应用
  3. springmvc(17)异步消息简介(部分)
  4. 微服务设计原则和解决方案
  5. 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题
  6. 运行 docker gitlab
  7. 预定义类型未定义或导入_LimeSurvey基础教程(二)——问题类型
  8. python 流式编程_Java8 Stream流式编程,极大解放你的生产力!
  9. JAVE 视音频转码
  10. ITIL、COBIT、CMMi和ISO 17799管理新一代数据中心的最佳实践介绍
  11. 凯文·凯利:最伟大的产品还没有被创造出来
  12. 计算机考研失败后,大部分人的找工作现状
  13. 微信小程序设置页面背景颜色
  14. nginx实现静态文件的token认证
  15. C51 (矩阵键盘密码锁)
  16. 如何检测计算机性能 具体步骤,如何测试电脑性能
  17. 【数据挖掘】5-Zookeeper集群搭建
  18. 超频心得8:最简单超频调试之映泰TA770A2+SE
  19. 个人桌面版linux,Linux 个人桌面版压根普及不了,就目前的情况来看……
  20. pms酒店管理系统功能,酒店管理系统软件开发

热门文章

  1. 最新Golang安装教程(Linux环境 Ubuntu + Go) 附centos安装视频链接
  2. java kmp算法_KMP算法java版实现
  3. php composer 安装,composer安装的方法步骤(图文)
  4. python英文语义角色标注_【顶会100秒】基于相似词计算的旅游词汇语义分析
  5. matlab将矩阵提取,matlab – 从现有矩阵中提取矩阵
  6. 能用python做信号处理吗_Python中的信号处理
  7. 在linux下也能进行51单片机开发吗?送你一份教程。
  8. php毕设周记_毕设周记
  9. python 文件格式转换_python实现txt文件格式转换为arff格式
  10. html5简介的文本框,HTML5实战与剖析之表单——文本框脚本