Comment attendre de fil avant de passer?
J'ai un code pour le démarrage d'un thread sur le .NET CF 2.0:
ThreadStart tStart = new ThreadStart(MyMethod);
Thread t = new Thread(tStart);
t.Start();
Si j'appelle ce à l'intérieur d'une boucle les éléments complètement hors de vue. Comment introduire une attente après t.Start()
, de sorte que le travail sur le thread se termine avant que le code continue? Va BeginInvoke/EndInvoke être une meilleure option pour ce que manuellement créer des threads?
OriginalL'auteur Brian Lyttle | 2008-08-09
Vous devez vous connecter pour publier un commentaire.
Combien ordonnance avez-vous besoin d'imposer sur les fils? Si vous avez juste besoin de tous les travaux entrepris dans la boucle pour terminer avant le code continue, mais vous ne se soucient pas de l'ordre du travail à l'intérieur de la boucle se termine, puis l'appel de Jointure est la réponse. Pour ajouter plus de détails à Kevin Kenny réponse, vous devriez appeler Rejoindre à l'extérieur la boucle. Cela signifie que vous aurez besoin d'une collection de tenir les références pour les fils de vous lancer:
En revanche, si vous avez appelé à se Joindre à l'intérieur de la boucle, le résultat devrait être le même que de ne pas utiliser des threads. Chaque itération de la boucle de corps serait de créer et démarrer un thread, mais ensuite immédiatement le Rejoindre et attendre qu'elle se termine.
Si la personne fils de produire un résultat (écrire un message dans un journal, par exemple), alors les messages peuvent toujours apparaître de l'ordre, car il n'y a pas de coordination entre les threads. Il est possible d'obtenir les fils à la sortie de leurs résultats dans l'ordre en les coordonnant avec un Moniteur.
OriginalL'auteur Dominic Cooney
Une autre façon de l'attente d'un thread pour se terminer à l'aide d'un
AutoResetEvent
.OriginalL'auteur ollifant
Si je suis en train de lire ceci, vous êtes à partir d'éléments de travail sur le tas de fils, mais vous avez peur que les fils sont l'achèvement de la commande, et préfèrent attendre jusqu'à ce que chaque thread se termine dans l'ordre qu'ils ont commencé ?
Si c'est le cas, alors je ne suis pas sûr de savoir pourquoi vous êtes en train de créer un thread par l'élément de travail. Peut-être que vous pourriez développer?
Si vous avez besoin d'attendre qu'un thread pour terminer l', vous pourriez faire:
OriginalL'auteur Kev