Warum ist BackgroundWorker immer beschäftigt?

Ich habe in meiner WPF-Anwendung etwas Merkwürdiges an meinem Background Worker festgestellt.

Was ich jetzt versuche zu erreichen, ist zu warten, bis das BW beendet ist, um einen anderen Thread zu starten.

Überprüfen Sie den folgenden Code:

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

Bitte beachten Sie, dass ich einen Dispatcher hinzugefügt habeRunWorkerAsyncCompleted Veranstaltung. Obwohl, wenn ich diese Zeile entferne, das Ereignis VERFOLGT und es ist wirklich seltsam, dass.

Wie kann ich warten, bis das bw beendet ist?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage