C#中Invoke的用法(转)
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,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的用法(转)相关推荐
- C#中Invoke的用法
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫"打开",单击之后按钮上的文本显示 ...
- 【转】C#中Invoke的用法
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...
- C#中Invoke的用法()
invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...
- .Net基础——程序集与CIL HttpClient封装方法 .Net Core 编码规范 C#中invoke和beginInvoke的使用 WebServeice 动态代理类...
.Net基础--程序集与CIL 1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll则需 ...
- mysql中change用法,mysql 中alter的用法以及一些步骤
mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...
- mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...
- 【C++】C/C++ 中 static 的用法全局变量与局部变量
C/C++ 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C++ 中static的作用 2.1 总的 ...
- php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?
foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...
- python中str的index什么意思_python中index的用法是什么
index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...
最新文章
- C++20 - 下一个大版本功能确定
- Java在游戏服务器开发中的应用
- springmvc(17)异步消息简介(部分)
- 微服务设计原则和解决方案
- 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题
- 运行 docker gitlab
- 预定义类型未定义或导入_LimeSurvey基础教程(二)——问题类型
- python 流式编程_Java8 Stream流式编程,极大解放你的生产力!
- JAVE 视音频转码
- ITIL、COBIT、CMMi和ISO 17799管理新一代数据中心的最佳实践介绍
- 凯文·凯利:最伟大的产品还没有被创造出来
- 计算机考研失败后,大部分人的找工作现状
- 微信小程序设置页面背景颜色
- nginx实现静态文件的token认证
- C51 (矩阵键盘密码锁)
- 如何检测计算机性能 具体步骤,如何测试电脑性能
- 【数据挖掘】5-Zookeeper集群搭建
- 超频心得8:最简单超频调试之映泰TA770A2+SE
- 个人桌面版linux,Linux 个人桌面版压根普及不了,就目前的情况来看……
- pms酒店管理系统功能,酒店管理系统软件开发
热门文章
- 最新Golang安装教程(Linux环境 Ubuntu + Go) 附centos安装视频链接
- java kmp算法_KMP算法java版实现
- php composer 安装,composer安装的方法步骤(图文)
- python英文语义角色标注_【顶会100秒】基于相似词计算的旅游词汇语义分析
- matlab将矩阵提取,matlab – 从现有矩阵中提取矩阵
- 能用python做信号处理吗_Python中的信号处理
- 在linux下也能进行51单片机开发吗?送你一份教程。
- php毕设周记_毕设周记
- python 文件格式转换_python实现txt文件格式转换为arff格式
- html5简介的文本框,HTML5实战与剖析之表单——文本框脚本