D'accord, c'est facile:
Quelle est la différence entre
Application.ThreadException
etAppDomain.CurrentDomain.UnhandledException
?Dois-je gérer les deux?
Merci!
la source
D'accord, c'est facile:
Quelle est la différence entre Application.ThreadException
et AppDomain.CurrentDomain.UnhandledException
?
Dois-je gérer les deux?
Merci!
Application.ThreadException est spécifique à Windows Forms. Winforms exécute des gestionnaires d'événements en réponse aux messages qui lui sont envoyés par Windows. L'événement Click par exemple, je suis sûr que vous les connaissez. Si un tel gestionnaire d'événements lève une exception, il y a un arrêt arrière dans la boucle de message Winforms qui intercepte cette exception.
Ce backstop déclenche l' événement Application.ThreadException . Si vous ne le remplacez pas, l'utilisateur obtiendra un ThreadExceptionDialog . Ce qui lui permet d'ignorer l'exception et de continuer à exécuter votre programme. Pas une bonne idée d'ailleurs.
Vous pouvez désactiver ce comportement en appelant Application.SetUnhandledExceptionMode () dans la méthode Main () dans Program.cs. Sans ce backstop en place, la chose habituelle se produit lorsqu'un thread meurt d'une exception non gérée : AppDomain.UnhandledException se déclenche et le programme se termine.
Fwiw: "ThreadException" était un très mauvais choix de nom. Cela n'a rien à voir avec les threads.
Application.ThreadException
. J'ai soulevé une question à ce sujet [ici ] avec mon petit code C #.De la source :
Application.ThreadException
peut être intercepté et l' application pourrait continuer (en général, ce n'est pas une bonne idée, mais pour l'application comme l'exécution périodique de certaines actions, c'est une bonne solution).Pour intercepter les exceptions qui se produisent dans les threads non créés et détenus par Windows Forms, utilisez le
AppDomain.UnhandledException
. Il permet à l'application de consigner des informations sur l'exception avant que le gestionnaire par défaut du système ne signale l'exception à l'utilisateur et mette fin à l'application.Le traitement de cette exception n'empêche pas la fin de l'application.
Le maximum qui pourrait être fait (les données du programme peuvent être corrompues lorsque les exceptions ne sont pas gérées) est la sauvegarde des données du programme pour une récupération ultérieure. Après cela, le domaine d'application est déchargé et l'application se termine.
Pour plus de détails, consultez MSDN .
la source
OK - je l'avais devant moi, ce morceau de code de msdn est assez explicite:
la source
Eh bien, le fait est que,
ThreadException
se produit en raison d'un problème avec votre thread, leUnhandled Exception
est déclenché si le code lève une exception qui n'est pas gérée.Le moyen le plus simple de provoquer le second est de créer une application sans essayer ... attraper des blocs et lancer une exception.
Maintenant, si vous avez besoin d'une assurance, vous pouvez les gérer tous les deux, mais si vous capturez et gérez votre
exceptions
correctement, vous ne devriez pas avoir besoin duUnhandledException
gestionnaire car c'est un peu comme un fourre-tout.la source