Je veux tuer un fil quand quelque chose de très mauvais arrive. Quelle est votre suggestion de faire du suicide?question de suicide de fil
Répondre
Vous ne devriez jamais "tuer" un thread. À partir de votre programme principal, vous pouvez l'abandonner en utilisant la méthode Thread.Abort, mais ce n'est pas recommandé, et c'est complètement inutile.
Votre thread ne devrait être rien de plus qu'une méthode exécutant une longue boucle. Si quelque chose de "vraiment mauvais" se produit, revenez simplement de cette méthode et le thread se terminera.
Ce serait suffisant pour une telle boucle:
private void MyThreadLoop()
{
try
{
while (someCondition)
{
// do a lengthy operation
}
}
catch (Exception ex)
{
Log.Error("Something bad happened: ", ex);
}
}
public void Start()
{
Thread t = new Thread(MyThreadLoop);
t.Start()
}
D'autre part, si vous avez besoin de votre programme principal pour tuer le fil (mais ce n'est pas un « suicide » comme vous l'avez nommé), alors vous devriez signaler le fil que vous voulez qu'il se termine, et ne pas l'abandonner sans savoir ce qui se passe en arrière-plan.
Il n'est pas nécessaire de tuer complètement un thread, tout ce que vous avez à faire est de le faire arrêter de travailler sur la tâche en cours.
À l'intérieur du fil, il suffit de revenir de sa fonction. En dehors du thread, il y a la méthode Thread.Abort().
Vous pourriez essayer quelque chose comme ça. Le thread s'exécute jusqu'à ce qu'il reçoive un signal de "outside" et existe ensuite.
private static void Main(string[] args)
{
var shouldExit = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(
delegate
{
while (true)
{
Console.WriteLine("Running...");
if (shouldExit.WaitOne(0)) break;
}
Console.WriteLine("Done.");
});
// wait a bit
Thread.Sleep(1000);
shouldExit.Set();
Console.ReadLine();
}
- 1. fil Android MapActivity question
- 2. Question sur le fil RSS
- 3. Question du fil rss multilingue
- 4. mise à jour Silverlight fil croix question
- 5. Question sur WPF Dispatcher.BeginInvoke appelé par le même fil! Pourquoi?
- 6. problème de fil android
- 7. fil adresse de départ
- 8. C# fonctions de fil
- 9. Communication de fil
- 10. Boost Synchronisation de fil
- 11. fonction de fil de Strange C invocation
- 12. C++ division de fil dans le microprocesseur
- 13. Fil de sécurité dans une application rails
- 14. Programme de synchronisation sans fil
- 15. statique Compile de fil Exemple
- 16. et problème de fil, python
- 17. Personnalisation de SharePoint Fil d'Ariane
- 18. fil recherche de fichier récursive
- 19. Découverte de nœud sans fil
- 20. erreur de fil Boost: Référence
- 21. .NET: Comment avoir des données de fil principal de signal de fil de fond est disponible?
- 22. question de transaction
- 23. sécurité de fil de fonction strtok
- 24. Exemple de fil de nouvelles Facebook
- 25. .Net Erreur de fil entité de
- 26. Sécurité du fil de haricots de printemps
- 27. Fil de la fenêtre VTK à partir du fil principal, C++
- 28. sql question de question
- 29. Chargement de l'image de l'URL avec le fil et comment annuler le fil sur dealloc
- 30. Fenêtre de fermeture de la butée de fil
Tuer un thread ** est ** quelque chose de très mauvais. –
Voir [Comment tuer un fil instantanément en C#? ] (http://stackoverflow.com/questions/1327102/how-to-kill-a-thread-instantly-in-c). Aussi, je pense que vous voulez dire l'homicide ... :) –
Il n'est pas considéré comme un suicide si vous forcez le fil – Toad