У меня есть 2 асинхронных процесса, которые нуждаются в, которые будут называться один за другим (один из них представляет собой создание XML backgroundworker
, а другой - ROW BW, который использует файлы XML, созданные в первом процессе). Основной причиной этих потоков является прекращение замораживания пользовательского интерфейса и предоставление обновления статуса путем выполнения индикатора прогресса - поскольку такой синхронный подход нежелателен/возможен.Подождите завершения BackgroundWorker?
if (!CreateXMLBW.IsBusy)
{
CreateXMLBW.RunWorkerAsync("");
}
if (!CreateRarBW.IsBusy)
{
CreateRarBW.RunWorkerAsync();
}
Я не могу поставить второй BW в случае завершения первом, поскольку данные процессы могут быть использованы отдельно, и как таковой, если я просто хочу, чтобы создать XML-файлы, которые я могу сделать это.
Я пробовал использовать AutoResetEvent
и WaitOne
, но это (по какой-либо причине) все еще не работает.
Есть ли другие способы, которые я могу дождаться завершения BW без замораживания основного потока пользовательского интерфейса?
Почему вы не создаете нового Работника, который работает с этими двумя рабочими синхронно? и вы запускаете этого нового рабочего async – Fabske
Мне нравится эта идея, но идет против DRY. –
Сухо, вы не повторяете код при повторном использовании двух других рабочих. В любом случае решение задачи, предложенное ниже, намного более изящно :) – Fabske