Dlaczego BackgroundWorker zawsze jest zajęty?

Zrozumiałem coś dziwnego w moim pracowniku w tle w mojej aplikacji WPF.

To, co staram się teraz osiągnąć, to czekać, aż BW zakończy, aby uruchomić kolejny wątek.

Sprawdź następujący kod:

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();
}

Pamiętaj, że dodałem Dispatcher.Invoke, aby poczekać, aż bw nie będzie zajęty, ale WSZYSTKIE CZAS JEST ZAJĘTE, jeśli go wywołam i nigdy nie odpalęRunWorkerAsyncCompleted zdarzenie. Chociaż, jeśli usunę tę linię, FIRES wydarzenie i to naprawdę dziwne.

Jak mogę poczekać, aż bw skończy?

questionAnswers(4)

yourAnswerToTheQuestion