小编dgl*_*s61的帖子

如何等待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.");
Run Code Online (Sandbox Code Playgroud)

此外,是否允许这样做?

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();
}
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker autoresetevent waitone

1
推荐指数
1
解决办法
497
查看次数

标签 统计

autoresetevent ×1

backgroundworker ×1

c# ×1

waitone ×1