WinForms アプリケーションでのグローバル例外処理: 未処理のエラーのインターセプト
WinForms アプリケーションで未処理の例外を効果的に処理することは、予期しないアプリのクラッシュを防ぐために重要です。グローバル例外ハンドラーを実装すると、例外をデータベースに記録し、重要な機能が中断されないようにすることができます。
質問:
デバッグ モードでは、Application.Run を囲む Program.cs の try/catch ブロックを使用すると、例外が正常に処理されます。ただし、アプリケーションを非デバッグ モードで実行すると、例外は捕捉されず、ユーザーには [未処理の例外] ダイアログ ボックスが表示されます。
解決策:
グローバル例外処理を有効にするには、次の手順に従います:
UI スレッド例外ハンドラーを追加します:
<code class="language-csharp"> Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);</code>
未処理例外モードを設定します:
<code class="language-csharp"> Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);</code>
非 UI スレッド例外ハンドラーを追加します:
<code class="language-csharp"> AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);</code>
デバッグのための選択的な例外処理:
エラー分析を容易にするために、デバッグ中に例外処理をブロックすることを選択できます。例外処理コードを次の条件でラップします:
<code class="language-csharp">if (!AppDomain.CurrentDomain.FriendlyName.EndsWith("vshost.exe")) { ... /* 异常处理代码 */ }</code>
また、デバッガがアタッチされているかどうかを確認することもできます:
<code class="language-csharp">if (!System.Diagnostics.Debugger.IsAttached) { ... /* 异常处理代码 */ }</code>
これにより、アプリケーションが運用モードで実行されている場合にのみ例外が処理されることが保証されます。
以上がWinForms アプリケーションにグローバル例外処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。