Maison >développement back-end >C++ >Comment implémenter un gestionnaire d'exceptions global dans les applications de console .NET?
Gestion globale des exceptions dans les applications console .NET
Les applications console ont également besoin d'un mécanisme pour gérer les exceptions non gérées. Alors que les applications ASP.NET peuvent utiliser global.asax et que les applications/services Windows peuvent utiliser le gestionnaire d'événements UnhandledException dans AppDomain, les applications console adoptent une approche légèrement différente.
Solution pour application console
Dans .NET, la bonne façon de définir un gestionnaire d'exceptions global pour une application console est d'utiliser l'événement UnhandledException de la classe AppDomain :
<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += MyExceptionHandler;</code>
Cela fonctionne comme prévu dans .NET 2.0 et supérieur.
Instructions pour les développeurs VB.NET
Dans VB.NET, le mot-clé "AddHandler" doit être utilisé avant currentDomain, sinon l'événement UnhandledException ne sera pas vu dans IntelliSense. La différence de syntaxe provient de la manière dont VB.NET et C# gèrent la gestion des événements.
Exemple
Voici un exemple de gestion des exceptions globales dans une application console utilisant C# :
<code class="language-csharp">using System; class Program { static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; throw new Exception("发生异常"); } static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(e.ExceptionObject.ToString()); Console.WriteLine("按 Enter 键继续"); Console.ReadLine(); Environment.Exit(1); } }</code>
Restrictions
Il est important de noter que cette approche ne peut pas détecter les exceptions de chargement de type et de fichier générées par le compilateur JIT avant le début de l'exécution de la méthode Main(). Pour intercepter ces exceptions, vous devez différer le compilateur JIT, déplacer le code à risque dans une méthode distincte et appliquer l'attribut [MethodImpl(MethodImplOptions.NoInlining)].
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!