Est-ce que try / catch autour du programme entier C # est possible?
-
05-07-2019 - |
Question
Un programme C # est appelé par:
Application.Run (new formClass ());
Je voudrais mettre un essai / attraper autour de tout cela pour piéger les exceptions non capturées. Lorsque j'exprime cette méthode Run, les exceptions ne sont pas interceptées; le contrôle ne retourne ici que lorsque le programme se termine après une exception non interceptée.
Où puis-je mettre try / catch pour couvrir l'ensemble du programme? Merci!
La solution
Pour attraper les exceptions non gérées de Windows Form, connectez le
AppDomain.UnhandledException
et Application.ThreadException
/ a> événements.
Intéressant: Erreurs inattendues dans les applications gérées
Autres conseils
En principe, vous ne pouvez pas intercepter toutes les exceptions lorsque vous utilisez le processus d’hébergement CLR par défaut. Période. En effet, la AppDomain.UnhandledException
l'événement est uniquement une notification, vous ne pouvez pas gérer l'exception (ce qui signifie que vous ne pouvez pas empêcher la fermeture de l'application après le traitement de la notification).
Toutefois, vous pouvez intercepter et gérer toutes les exceptions dans le thread d'interface utilisateur d'une application WinForms à l'aide de son Application.ThreadException
gestionnaire (et contrôle le comportement via UnhandledExceptionMode
). Les autres threads générant une exception ne seront pas interceptés par ce gestionnaire.
En général, ce n’est pas une bonne idée d’essayer de gérer toutes les exceptions. Vous pouvez cependant utiliser le
AppDomain.UnhandledException
pour consigner l'erreur et / ou effectuer des tâches de nettoyage importantes (par exemple, fermer une base de données basée sur des fichiers ou quoi que ce soit).