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