Прежде всего, я все еще новичок, поэтому я был бы признателен, если бы вы проявили немного терпения :)
Я сегодня так сильно ломал голову по этому поводу.
Дело в том, что я хочу запустить три разных фоновых рабочих. Но я хотел бы подождать, пока один не закончит, чтобы запустить следующий и так далее.
Каждому фоновому работнику требуется время для завершения. Короче говоря, дело в том, что я использую WaitOne(), поэтому всякий раз, когда предыдущий фоновый рабочий говорит мне, что это сделано, я могу запустить новый, но поток пользовательского интерфейса зависает, пока три фоновых рабочих не закончат работу.
Я настраиваю другой 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();
}