Pourquoi BackgroundWorker est toujours occupé?

J'ai réalisé quelque chose d'étrange dans mon fond travailleur dans mon application WPF.

Ce que je suis en train d'accomplir est d'attendre jusqu'à ce que le BW finitions pour démarrer un autre thread.

Vérifier le code suivant:

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

Veuillez noter que j'ai ajouté un Répartiteur.Invoquer attendre jusqu'à ce que le bw est pas occupé, mais TOUT LE TEMPS EST OCCUPÉE si j'Invoque et ne jamais les feux de la RunWorkerAsyncCompleted événement. Bien que, si je supprime cette ligne, les FEUX de l'événement et c'est vraiment étrange.

Comment puis-je attendre jusqu'à ce que le bw finitions?

Il n'est pas clair, ce ligne vous retirer, et quels changements puis...pourriez-vous l'expliquer avec plus de soin?

OriginalL'auteur Darf Zon | 2013-01-21