现在有一个线程void ThdFunction(),里面有费时操作,并且会访问界面元素,正确的开线程方法如下。
首先,新开一个线程,
Thread Thd = new Thread(ThdFunction);
Thd.Start();
在线程里面,假如要Sleep 2秒后更新一个label的文本内容,
void ThdFunction()
{
//费时操作
Thread.Sleep(2000);
//....其他代码,不用访问界面元素
//访问界面元素,用c#的托管
Dispatcher.Invoke(new Action(() =>
{
//访问界面元素的代码放到托管里面
this.label.Content = "NewText";
}));
}
以上的方法就可以避免费时操作卡住主线程了,如果你觉得原理还不够清楚,可以和我讨论,因为我也绕了很大一圈,最后才了解到可以说是原理的东西,只是中间的过程大家不一定感兴趣,就不写了。