我试图让后台工作程序在主线程中运行一个微调器运行,我想等到后台工作程序完成。目前我可以有一个或另一个。我已尝试使用自动重置事件,但锁定主线程因此不显示微调器。是否有类似于自动重置事件,不会锁定主UI。
以下是我的一些代码
BackgroundWorker _bWorker = new BackgroundWorker();
_bWorker.DoWork += _bWorker_DoWork ;
_bWorker.RunWorkerCompleted += _bWorker_RunWorkerCompleted;
AutoResetEvent are = new AutoResetEvent(false);
_bWorker.RunWorkerAsync();
// Wait here until the background worker is finished
are.WaitOne();
...
private void _bWorker_DoWork(object sender, DoWorkEventArgs e)
{
// Show spinner
WaitSpinnerAdornerText = "Working";
IsWaitSpinnerVisible = true;
...
are.Set();
}
private void _bWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
IsWaitSpinnerVisible = false;
...
}
有什么想法吗?欢迎任何帮助!提前谢谢。
答案 0 :(得分:2)
使用BackgroundWorker
的重点是你不要“等待”它完成。只需删除AutoResetEvent
并触发当前位于RunWorkerAsync
_RunWorkerCompleted
之后的任何逻辑。
或者,您可以查看使用任务并行库并将该代码作为延续运行。
最后,您可以考虑使用Async CTP for .net 4.0,其中async / await功能的行为几乎与您希望编写代码的方式相同。