首先,我还是一个初学者,所以我会很感激,如果你可以有一定的耐心:)如何等待BackgroundWorker完成运行另一个BackgroundWorker(C#)?
我一直在抓我的脑袋,今天这么辛苦。
事情是,我想运行三个不同的背景工作者。但是我想等到一个人完成后才能开始下一个,等等。
每个背景工作者都需要时间完成。长话短说,事情是,我使用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();
}
序列为什么你在运行如果你能够使用任务,可以使用BGW吗? – Servy
我其实是一个初学者程序员。我真的不知道哪条路更好。 – dgls61