我遇到了一个小问题。我有两个线程,一个执行一个循环,每次都需要向 GUI 的线程返回/发送一个数字。为此,我使用BackGroundWorker和ReportProgress。
让我们这样说:
我有一个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();
}
现在,这个选项冻结了 GUI。
我知道 ReportProgress 在创建BackGroundWorker的线程上调用 ProgressChange 处理程序,所以我认为循环执行得如此之快,因此 GUI 的线程没有成功按要求打印值。
在不冻结 GUI 的情况下,我可以做些什么来执行这样的任务?
我听说过 Dispatcher,但我不确定它的用途。