La manipulation des exceptions non gérées problème
Je voulais mettre quelques gestionnaire pour toutes les exceptions inattendues que je n'aurais pas pris à l'intérieur de mon code. Dans Program.Main()
j'ai utilisé le code suivant:
AppDomain.CurrentDomain.UnhandledException
+= new UnhandledExceptionEventHandler(ErrorHandler.HandleException);
Mais cela n'a pas fonctionné comme je l'espérais. Quand j'ai commencé à l'application en mode de débogage et a jeté une exception, elle a fait appel du gestionnaire, mais par la suite, l'exception aide dans Visual Studio sauté vers le haut comme si l'exception s'est produite sans aucune manipulation. J'ai essayé de l'Application.Exit() dans le gestionnaire mais il ne fonctionne pas ainsi.
Ce que je voudrais, c'est que l'exception est gérée avec mon gestionnaire, puis l'application se ferme bien. Est-il un autre moyen de le faire ou suis-je à l'aide du code ci-dessus dans le mauvais sens?
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous êtes en cours d'exécution à travers Visual Studio en mode de Débogage. Si vous relâchez et installer votre application quelque part d'autre, rien d'autre que votre gestionnaire global d'exception seront traitées.
Normalement, j'utilise quelque chose comme ça pour essayer d'attraper tous les imprévus de haut-niveau exceptions.
Peut-être que c'est quelque chose que vous trouverez utile aussi? Ce code de la route tous les trois façons d'attraper inattendu de haut niveau exceptions au moyen d'un appel de méthode. Tous vous avez besoin maintenant est une classe statique
FatalExceptionHandler
qui comprend votre haut-niveau de la gestion des exceptions dans sesHandle
méthode.Et vraiment, tout développeur d'application sait qu'il ya vraiment seulement deux choses à faire:
Si vous pensez point deux est étrange, n'oubliez pas que nous ne vous embêtez pas à le faire, en premier lieu pour des situations exceptionnelles. Ces choses sont probablement des bugs qui ont besoin de modifier votre application pour être correctement traitée. Tout autre traitement d'exception - la fonctionnelle de type doit être inférieure vers le bas à l'intérieur de votre programme, la capture de certains types d'exceptions où cela fait sens et leur manipulation dans le sens. Autre chose doit proposer à votre
FatalExceptionHandler
à faire connaître et d'arrêter la peut-être paralysé programme de travail de l'état corrompuMorts programmes dites pas de mensonges... 😉
e.ExceptionObject
àException
sans vérifier d'abord, comme il ne sera pas toujours être de typeException
... pourrait aboutir à la création d'une nouvelleException
ici.Noter que les exceptions non gérées sont encore assez fatale; vous ne pouvez vraiment l'utiliser pour l'exploitation forestière, ou peut-être que certains hâtives fermer. Ni ceci, ni
Application.ThreadException
peut être utilisé comme un mondial de l'évier pour les erreurs.La meilleure approche consiste à ajouter une manipulation correcte - par exemple, autour de l'ensemble de votre
Main()
logique. Notez que même ce ne peut pas attraper quelques exceptions près, telles que les erreurs pendant le chargement du formulaire (qui deviennent particulièrement mauvais, vous pouvez les attraper avec un débogueur, mais pas sans).Peut-être ce que vous cherchez est
Environment.Exit(int errorcode)
Ce comportement est par la conception.
Mais il y est un travail autour de.
Soit vous appelez
Process.GetCurrentProcess().Kill();
dans le gestionnaire, ou tout simplement ne pas laisser le gestionnaire de fin.Découvrez l'exemple:
Cela ne devrait pas être un défaut de l'évier pour les exceptions, sûrement.
Mais cela devrait être fait pour rendre compte des exceptions gracieusement.