版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuguanghao/article/details/77074704
在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应。 同时我们又需要在工作线程中更新UI界面上的控件,
1、线程间操作控件无效
2、使用delegate和invoke方法来从其他线程调用控件
//声明一个委托的类型
public delegate void ShowMessageDelegate();
//声明一个委托的对象
public ShowMessageDelegate SMD;
private void button1_Click(object sender, EventArgs e)
{
Thread thread3 = new Thread(showMessage);
thread3.Start();
}
private void showMessage()
{
//判断这个控件是否有被主线程访问
if(this.label1.InvokeRequired)
{
SMD = new ShowMessageDelegate(showMessage);
//this这里指窗体,在这里调用窗体的invoke方法,
this.Invoke(SMD);//这里也可以直接用this.BeginInvoke(SMD);BeginInvoke方法是异步的, 它会另起一个线程去完成工作线程
}
else
{
label1.Text = "sadfafdasda";
}
}
3、还有一种方法通过后台程序控制来显示,这种方法还在逐步完善中。