ホームページ > バックエンド開発 > C++ > .NET コンソール アプリケーションにグローバル例外ハンドラーを実装するにはどうすればよいですか?

.NET コンソール アプリケーションにグローバル例外ハンドラーを実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-24 08:06:11
オリジナル
952 人が閲覧しました

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

.NET コンソール アプリケーションでのグローバル例外処理

コンソール アプリケーションには、ハンドルされない例外を処理するメカニズムも必要です。 ASP.NET アプリケーションは global.asax を使用でき、Windows アプリケーション/サービスは AppDomain で UnhandledException イベント ハンドラーを使用できますが、コンソール アプリケーションは少し異なるアプローチを採用します。

コンソール アプリケーションのソリューション

.NET でコンソール アプリケーションのグローバル例外ハンドラーを定義する正しい方法は、AppDomain クラスの UnhandledException イベントを使用することです。

<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += MyExceptionHandler;</code>
ログイン後にコピー

これは、.NET 2.0 以降では期待どおりに機能します。

VB.NET 開発者向けの手順

VB.NET では、"AddHandler" キーワードを currentDomain の前に使用する必要があります。そうしないと、UnhandledException イベントが IntelliSense で認識されません。構文の違いは、VB.NET と C# がイベント処理をどのように処理するかに起因します。

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>
ログイン後にコピー

制限事項

このアプローチでは、Main() メソッドの実行が開始される前に、JIT コンパイラーによって生成された型例外とファイル読み込み例外をキャッチできないことに注意することが重要です。これらの例外をキャッチするには、JIT コンパイラを延期し、危険なコードを別のメソッドに移動し、[MethodImpl(MethodImplOptions.NoInlining)] 属性を適用する必要があります。

以上が.NET コンソール アプリケーションにグローバル例外ハンドラーを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート