コンソール アプリケーションでのグローバル例外処理
コンソール アプリケーションでは、未処理の例外によってアプリケーションの実行が中断され、データが失われる可能性があります。これを防ぐために、グローバル例外ハンドラーを定義して、これらの例外を適切にキャッチして処理できます。
カスタマイズされたグローバル例外処理
AppDomain クラスは、グローバル例外ハンドラーを定義するためにサブスクライブできる UnhandledException イベントを提供します。 .NET 2.0 以降では、次のコードを使用できます:
<code class="language-csharp">AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler);</code>
VB.NET ノート
VB.NET で作業する場合は、以下に示すように、AppDomain.CurrentDomain オブジェクトの前に「AddHandler」キーワードを使用する必要があることに注意してください。
<code class="language-vb.net">AddHandler AppDomain.CurrentDomain.UnhandledException, New UnhandledExceptionEventHandler(AddressOf MyExceptionHandler)</code>
実装例
次の 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>
注: JIT コンパイル中に CLR によって生成されるタイプおよびファイルのロード例外は、グローバル例外ハンドラーを使用してキャッチできません。これらの例外を処理するには、遅延コンパイルを行うか、危険なコードに [MethodImpl(MethodImplOptions.NoInlining)]
属性を適用することを検討してください。
以上がコンソール アプリケーションにグローバル例外処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。