原文:http://blog.sina.com.cn/s/blog_70bf5798010185i4.html
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,多个线程对一个变量同时访问是非常危险的
所以在编程中我们可以只用Invoke 和 BeginInvoke 来解决这个问题,使多线程中安全的更新界面显示。
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
在编程中,由于界面的更新是很频繁的,所以应尽可能的吧操作对丢给工作线程,尽量让更新界面的UI线程工作量变少
如果要在子线程中创建其他窗体,也应该有UI线程来创建,方法类似
namespace test
{
}
//启动一个线程
Thread thread=new Thread(new ThreadStart(DoWork));
thread.Start();
//线程方法
private void DoWork()
{
}
{
if (textBox1.InvokeRequired)
{
getTextBack st = new getTextBack(setMsg);
this.Invoke(st, new object[] { pStr });
}
else
{
textBox1.Text += "\n" + pStr + "\n";
}
}