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
Libérer: 2025-01-24 08:06:11
original
998 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal