我遇到了一个小问题。我有两个线程执行循环,每次都需要返回/发送一个数字到GUI的线程。为此,我使用BackGroundWorker和ReportProgress。简单的任务没有冻结gui
让我们说这样的事情:
我有一个BackgroundWorker的执行(DoWork的)一个简单的循环,从0计数到什么。循环的每个条目都使用ReportProgress事件将计数器发送到GUI的线程,该线程将打印计数器的值。
void worker_DoWork(object sender, DoWorkEventArgs e)
{
int count = 0;
BackgroundWorker Worker = (BackgroundWorker)sender;
while (count < 10000000)
{
Worker.ReportProgress(count);
count++;
}
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
txt.Text = e.ProgressPercentage.ToString();
}
现在,这个opretion冻结了GUI。
我知道ReportProgress在创建BackGroundWorker的线程上调用ProgressChange处理程序,所以我认为循环执行速度如此之快,因此GUI线程无法按要求打印值。
如何在不冻结GUI的情况下执行类似的任务?
我听说过Dispatcher,但我不确定它的用途。
你的意思是GUI的权利?因为GUID是完全不同的东西,据我所知:-)另外,你是否使用WinForms?或者我可以假设WPF? – Daneo
'GUI' =图形用户界面; 'GUID' =全局唯一标识符...仅供参考;) –