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

WinForms アプリケーションにグローバル例外処理を実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-14 10:15:43
オリジナル
161 人が閲覧しました

How to Implement Global Exception Handling in WinForms Applications?

WinForms アプリケーションでのグローバル例外処理: 未処理のエラーのインターセプト

WinForms アプリケーションで未処理の例外を効果的に処理することは、予期しないアプリのクラッシュを防ぐために重要です。グローバル例外ハンドラーを実装すると、例外をデータベースに記録し、重要な機能が中断されないようにすることができます。

質問:

デバッグ モードでは、Application.Run を囲む Program.cs の try/catch ブロックを使用すると、例外が正常に処理されます。ただし、アプリケーションを非デバッグ モードで実行すると、例外は捕捉されず、ユーザーには [未処理の例外] ダイアログ ボックスが表示されます。

解決策:

グローバル例外処理を有効にするには、次の手順に従います:

  1. UI スレッド例外ハンドラーを追加します:

    <code class="language-csharp"> Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);</code>
    ログイン後にコピー
  2. 未処理例外モードを設定します:

    <code class="language-csharp"> Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);</code>
    ログイン後にコピー
  3. 非 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 サイトの他の関連記事を参照してください。

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