Maison >développement back-end >C++ >Comment implémenter un gestionnaire d'exceptions global dans les applications de console .NET?

Comment implémenter un gestionnaire d'exceptions global dans les applications de console .NET?

Barbara Streisand
Barbara Streisandoriginal
2025-01-24 08:06:11956parcourir

How to Implement a Global Exception Handler in .NET Console Applications?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn