BackgroundWorkers n'arrête jamais d'être occupé

for (do it a bunch of times)
{         
    while (backgroundWorker1.IsBusy && backgroundWorker2.IsBusy &&
           backgroundWorker3.IsBusy && backgroundWorker4.IsBusy &&
           backgroundWorker5.IsBusy)
    {
        System.Threading.Thread.Sleep(0001);
    }

    if (!backgroundWorker1.IsBusy)
    {
        backgroundWorker1.RunWorkerAsync();
    }
    else if (!backgroundWorker2.IsBusy)
    {
        backgroundWorker2.RunWorkerAsync();
    }
    else if (!backgroundWorker3.IsBusy)
    {
        backgroundWorker3.RunWorkerAsync();
    }
    else if (!backgroundWorker4.IsBusy)
    {
        backgroundWorker4.RunWorkerAsync();
    }
    else if (!backgroundWorker5.IsBusy)
    {
        backgroundWorker5.RunWorkerAsync();
    }
}

il gère cinq fois (chaque BG-travailleur une fois) et se coince dans le temps. Ne pas le backgroundworkers jamais cesser d'être occupé ? comment puis-je vérifier la disponibilité ?

remarque: il y a 5 threads de travail, cela assure, aucun d'eux n'est jamais arrêté, toujours confier le travail à eux. Mais ils refusent de me dire quand ils sont disponibles, j'ai pensé qu'aurait une solution simple..

--[edit demande]---

En fait, c'était seulement un paramètre fictif, je l'ai enlevé et j'ai oublié de le sortir, je ne l'utilise que pour appeler la dowork, qui fait le sale boulot:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    timeconsumingfunction(publicstring);
}

Et la timeconsumingfunction N'fin. entrer dans dans le débogueur et l'exécution ligne par ligne, il va jusqu'au bout et arrive en finale '}'. Cela signifie qu'il se termine, non ?

---[EDIT RÉPONSE]----
il a travaillé par SIMPLEMENT remplacer la ligne

System.Threading.Thread.Sleep(0001);

avec

Application.DoEvents();

Je suppose que cela irait à l'arrière-plan, mais pas en recevoir la réponse et pas de mise à jour de la IsBusy balises.

Merci à tous, d'excellentes réponses, a beaucoup aidé!

source d'informationauteur Marcelo