VS2005中,我们经常会使用新的线程执行比较复杂的操作,以提高应用程序的性能。当操作执行完成后更新UI控件向用户反馈执行结果时,如果采用一般的更新方法总是会出现“跨线程操作无效,不是在创建控件的线程访问它”的错误。
一、声明代理及代理方法,在代理方法中加入更新UI控件的代码:
delegate void UpdateUIDelegate(string text, Color color);
private void UpdateUI(string text, Color color)
{
label1.Text = text;
label1.ForeColor = color;
}
二、定义线程方法,在其中使用委托调用代理方法实现UI控件更新
private void ExecuteProcessing()
{
UpdateUIDelegate UIUpdater=new UpdateUIDelegate();//实例化代理
this.Invoke(UIUpdater,new object[]{"newText",Color.Green});
//同步调用代理,参数与代理方法中形参对应 (UIUpdater是不是改成new UpdateUIDelegate(UpdateUI),并把实例化代理的那行删除)
}
三、创建新的线程并启动
private void button1_Click(object sender, EventArgs e)
{
myWorkerThread = new Thread(new ThreadStart(ExecuteProcessing));
myWorkerThread.Start();
}