Por que o BackgroundWorker está sempre ocupado?

Eu percebi algo estranho no meu trabalho em segundo plano no meu aplicativo WPF.

O que estou tentando fazer agora é esperar até que o BW termine de iniciar outro tópico.

Verifique o seguinte código:

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

Por favor, note que eu adicionei um Dispatcher.Invoke para esperar até que o bw não esteja ocupado, mas TODO O TEMPO ESTÁ OCUPADO se eu invoco e nunca dispareiRunWorkerAsyncCompleted evento. Embora, se eu remover essa linha, FIRES o evento e é realmente estranho isso.

Como posso esperar até que o bw termine?

questionAnswers(4)

yourAnswerToTheQuestion