9

例外が .NET アプリでキャッチされない場合、仮想マシンはユーザーにエラー メッセージを表示します。アプリの最上位にブロックを配置することなく、独自のエラー メッセージを表示できるようにしたいと考えていますcatch(キャッチされない例外のデバッグが面倒になるため)。

現在、AppDomain.UnhandledExceptionイベント リスナーに独自のエラー ダイアログを表示していますが、.NET で作成されたダイアログは引き続き表示されます。Environment.FailFastそれは私のブロックをバイパスするので、私は避けたいと思いfinallyます(私はまだいくらか愛着を持っています)。

4

3 に答える 3

5

これが WinForms の場合、AppDomain.UnhandledExceptionApplication.ThreadExceptionを処理して、それらをすべてキャッチする必要があります。一部の例外は一方にフィルター処理され、他の例外は他方にフィルター処理されます。

ここに役立つはずの同様の(ただし正確な重複ではない)質問がありました:C# - WinForms - Exception Handling for Events

于 2012-07-04T20:51:59.903 に答える
1

Windows フォームには組み込みの例外ハンドラーがあり、デバッガーがアタッチされておらず、ウィンドウ メッセージの処理中に例外が発生し、App.Config でjitDebugging = false の場合に、ハンドルされないマネージ例外を既定でキャッチします。次に、エンドユーザーにダイアログを表示し、アプリの終了を防ぎます。

HKLM\Software\Microsoft\ .NetFrameworkの下のレジストリ設定DbgJitDebugLaunchSettingを変更できます。これには、私が認識している 3 つの値のいずれかがあります。

  • 0: 「デバッグまたは終了」を求めるユーザー ダイアログを表示します。
  • 1: CLR が処理できるように例外を通過させます。
  • 2: DbgManagedDebuggerレジストリ キーで指定されたデバッガーを起動します。

Visual Studio で、[ツール] > [オプション] > [デバッグ] > [JIT]に移動して、このキーを 0 または 2 に設定します。

( http://msdn.microsoft.com/en-us/library/2ac5yxx6(v=vs.90).aspxを参照)

于 2012-07-04T20:51:16.007 に答える
0

WP7にある同様のパターンはどうですか?

    // Code to execute on Unhandled Exceptions
    private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
    {
        // do stuff
        if (System.Diagnostics.Debugger.IsAttached)
        {
            // An unhandled exception has occurred; break into the debugger
            System.Diagnostics.Debugger.Break();
        }
    }
于 2012-07-04T20:45:15.850 に答える