Почему BackgroundWorker всегда занят?

Я понял что-то странное в фоновом рабочем приложении в приложении WPF.

То, что я пытаюсь сделать прямо сейчас, это ждать, пока BW не закончит запуск другого потока.

Проверьте следующий код:

if (bw.IsBusy)
{
    bw.CancelAsync();

    System.Threading.ThreadStart WaitThread = 
        new System.Threading.ThreadStart(delegate() {
            while (bw.IsBusy)
            {
                System.Threading.Thread.Sleep(100);
            }

            bw.RunWorkerAsync();
        });

    System.Windows.Application.Current.Dispatcher.Invoke(
        System.Windows.Threading.DispatcherPriority.Normal,
        WaitThread);  // if I remove this line, bw fires RunWorkerAsyncEvent
}
else
{
    bw.RunWorkerAsync();
}

Обратите внимание, что я добавил Dispatcher.Invoke, чтобы дождаться, пока bw не будет занят, но ВСЕ ВРЕМЯ ЗАНЯТО, если я вызываю его и никогда не запускаюRunWorkerAsyncCompleted мероприятие. Хотя, если я удаляю эту строку, запускается событие, и это действительно странно.

Как я могу ждать, пока не закончится BW?

Ответы на вопрос(4)

Ваш ответ на вопрос