c#使用MethodInvoker解决跨线程访问控件
.net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线程访问作检查,Control.CheckForIllegalCrossThreadCalls = false;可以实现访问,但是出不出错不敢保证C#跨线程访问控件运行时错误。
使用MethodInvoker即可解决:
原代码:
private void btnOK_Click(object sender, EventArgs e)
{
tslInfo.Text = "请稍候...";
Thread td = new Thread(new ThreadStart(run));
td.Start();
}
/// <summary>
/// 线程方法
/// </summary>
private void run()
{
this.tslInfo.Text = "就绪";
}
修改后:
private void btnOK_Click(object sender, EventArgs e)
{
tslInfo.Text = "请稍候...";
Thread td = new Thread(new ThreadStart(threadRun));
td.Start();
}
/// <summary>
/// 原线程方法
/// </summary>
private void run()
{
this.tslInfo.Text = "就绪";
}
/// <summary>
/// 线程方法
/// </summary>
private void threadRun()
{
MethodInvoker In = new MethodInvoker(run);
this.BeginInvoke(In);
}