首先,我还是一个初学者,所以如果你能有一些耐心,我将不胜感激:)
今天我一直在为此苦苦思索。
问题是,我想运行三个不同的后台工作人员。但我想等到一个完成运行下一个,依此类推。
每个后台工作人员都需要时间来完成。长话短说,问题是,我正在使用 WaitOne() ,所以只要前一个后台工作人员告诉我它已经完成,我就可以开始运行新的,但是 UI 线程一直冻结,直到三个后台工作人员完成。
我正在设置一个不同的 AutoResetEvent,它负责处理整个等待和运行的事情。
这是代码:
AutoResetEvent _resetRIEvent = new AutoResetEvent(false);
AutoResetEvent _resetHEvent = new AutoResetEvent(false);
AutoResetEvent _resetSEvent = new AutoResetEvent(false);
await Task.Run(() => bgwTestResInd.RunWorkerAsync());
_resetRIEvent.WaitOne();
await Task.Run(() => bgwTestHipot.RunWorkerAsync());
_resetHEvent.WaitOne();
await Task.Run(() => bgwTestSurge.RunWorkerAsync());
_resetSEvent.WaitOne();
MessageBox.Show("Im done for real.");
另外,是否允许这样做?
private void bgwTestResInd_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_resetRIEvent.Set();
}
private void bgwTestHipot_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_resetHEvent.Set();
}
private void bgwTestSurge_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_resetSEvent.Set();
}