.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 サイトの他の関連記事を参照してください。