1.Invoke与BeginInvoke
Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程(主线程)中对象的属性时,调用this.Invoke();
在多线程编程中,经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法.
Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过Invoke(同步) 或者 BeginInvoke(异步) 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
//声明委托
public delegate void UpdateForm_dl(string str);
private void button1_Click(object sender, EventArgs e)
{
//启动线程
Thread th = new Thread(new ThreadStart(Calldelegate));
th.Start();
}
private void Calldelegate()
{
//-方法一、调用委托
// this.BeginInvoke(new UpdateForm_dl(UpdateForm), new object[] { "文本框更新" });
//方法二
this.Invoke(new Action(() =>
{
textBox1.Text = "文本框更新";
}
));
}
public void UpdateForm(string strMess)
{
this.textBox1.Text = strMess ;
}