c#中Invoke方法
2015-10-15 09:21
771 查看
invoke方法的初衷是为了解决在某个非某个控件创建的线程中刷新该控件可能会引发异常的问题。说的可能比较拗口,举个例子:主线程中存在一个文本控件,在一个子线程中要改变该文本的值,此时会有可能引发异常。
为了避免该问题,需要在子线程中使用invoke方法来封装刷新文本内容的函数。Invoke
或者 BeginInvoke 去调用,两者的区别就是Invoke 会导致工作线程等待,而BeginInvoke 则不会
using System.Threading;
public delegate void MyInvoke(string str);//invoke方法创建委托
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"}); //调用invoke方法
}
public void SetTxt(string str)//委托对应的方法
{
txtReceive.Text += "invoke";
}
this.listView1.Invoke(new EventHandler(delegate
{
listView1.Items.RemoveAt(i);
}));
为了避免该问题,需要在子线程中使用invoke方法来封装刷新文本内容的函数。Invoke
或者 BeginInvoke 去调用,两者的区别就是Invoke 会导致工作线程等待,而BeginInvoke 则不会
using System.Threading;
public delegate void MyInvoke(string str);//invoke方法创建委托
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"}); //调用invoke方法
}
public void SetTxt(string str)//委托对应的方法
{
txtReceive.Text += "invoke";
}
this.listView1.Invoke(new EventHandler(delegate
{
listView1.Items.RemoveAt(i);
}));
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程