Je veux savoir sigestion des exceptions dans l'environnement multi-thread
try/catch peut intercepter les exceptions levées par les threads enfants.
Sinon, quelle est la meilleure pratique pour gérer les exceptions levées dans le thread enfant.
Je veux savoir sigestion des exceptions dans l'environnement multi-thread
try/catch peut intercepter les exceptions levées par les threads enfants.
Sinon, quelle est la meilleure pratique pour gérer les exceptions levées dans le thread enfant.
Vous pouvez écouter les événements Application.ThreadException
et AppDomain.UnhandledException
pour intercepter des exceptions non interceptées à partir du thread. Mais le mieux est d'attraper et de gérer les exceptions dans les threads eux-mêmes. Cela devrait être un dernier recours pour la fermeture/journalisation gracieuse.
Cela dépend du framework .NET que vous ciblez.
Dans 1.1 et moins, les exceptions lancées par les threads enfants ne seront transmises au thread principal que si elles s'exécutent en dehors d'un bloc try/catch.
Dans 2.0 et versions ultérieures, ce comportement est modifié: le thread sera terminé et les exceptions ne pourront plus continuer. De toute façon, vous pouvez gérer les exceptions dans un thread comme vous le feriez dans une application monothread.
Voir http://msdn.microsoft.com/en-us/library/ms228965(v=VS.90).aspx pour référence.
Les exceptions lancées par les threads enfants vont tuer tout le programme en commençant par .NET 2. – cdhowie
vient d'être essayé. cdhowie est correct. – user496949
Que voulez-vous dire par "transmis au thread principal"? Pouvez-vous donner un exemple de comment cela fonctionnerait et comment ces exceptions pourraient être attrapées? –
Non, considérez le code suivant:
try
{
var t = new Thread(()=>
{
Thread.Sleep(5000);
throw new Exception();
});
t.Start();
//t.Join();
}
catch
{
//you can't deal with exception here
//even though you uncomment `t.Join`
}
Traiter avec des exceptions dans le fil de l'enfant que les exceptions "appartient" à.
Quelle technologie utilisez-vous? WinForms, WPF, Console, ASP.net? –