Obtenir Des Threads En Cours D'Exécution
si je lance plusieurs fils par le code
var t = new Thread(() =>
{
try
{
}
}
catch (Exception ca)
{
MessageBox.Show(ca.Message);
}
});
t.SetApartmentState(ApartmentState.STA);
t.Name = "Thread1";
t.Start()
pouvons-nous avoir quelque chose qui nous permet ensuite sur terminer le thread en connaissant son nom permet de dire que nous avons l'intention d'arrêter de thread1 ou thread4 nous devrions être en mesure de l'arrêter:)
Vous devez vous connecter pour publier un commentaire.
Les choses vont être très facile si vous avez quelque chose comme un
Dictionary<string,Thread>
, lorsque vous démarrez un thread, le mettre dans le dictionnaire avec son nom comme la clé. Ensuite, vous pouvez obtenir un peu de fil par son nom à l'aide de:Ou c'est plus simple si vous avez une liste de threads et à chaque fois que vous en créer un nouveau, vous l'ajoutez à votre liste, et vous supprimez régulièrement les discussions qui ont quitté. Vous pourriez aussi avoir besoin de synchronisation.
La Fil classe a un Abandonner méthode qui vous permet d'arrêter le fil. Cela étant dit, la bonne façon de terminer un thread est d'utiliser une ressource partagée qui indique si le thread doit continuer ou s'arrêter. Par exemple dans le fil que vous avez pu mettre en œuvre un mécanisme qui permet de tester la valeur de cette variable statique dans une boucle et de sortir de la boucle. Sur le thread principal lorsque vous décidez de résilier le thread d'arrière-plan il suffit de régler la valeur de la variable statique et le fil sera tout simplement arrêter par lui-même.
Voici un exemple:
et à l'intérieur du fil:
et quand vous décidez d'arrêter le fil à partir d'un autre thread:
Vous pouvez construire un
Dictionary <string,Thread>
. La clé est le nom et la valeur de l'objet thread lui-même. Vous appelez ensuite Abandon de méthode sur l'objet thread obtenu à partir de la dicitonary.NOTE: Abandonner n'est pas une très bonne façon de terminer un thread. Essayez d'utiliser certains indicateurs globaux.
Abort()
pourrait le faire, mais habituellement, il ya un léger retard. Si vous utilisez des indicateurs que vous devez interroger leur état. Si vous souhaitez arrêter le fil relativement instantanément alors que vous auriez à l'interrogation que l'indicateur après chaque instruction qui pourrait ne pas être souhaitable. Donc, vous avez à crefully conception le code qui s'exécute sur le fil et le code qui utilise le fil résultat à prendre ces faits en considération.