¿Por qué BackgroundWorker siempre está ocupado?

Me di cuenta de algo extraño en mi trabajador de fondo en mi aplicación WPF.

Lo que estoy tratando de lograr ahora es esperar hasta que el BW termine para iniciar otro hilo.

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

Tenga en cuenta que agregué un Dispatcher. Invoco a esperar hasta que el bw no esté ocupado, pero TODO EL TIEMPO ESTÁ OCUPADO si lo invoco y nunca dispara elRunWorkerAsyncCompleted evento. Aunque, si elimino esa línea, INCORPORA el evento y es realmente extraño.

¿Cómo puedo esperar hasta que el bw termine?