Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何覆盖默认的未捕获异常对话框?_C#_Winforms_Exception Handling - Fatal编程技术网

C# 如何覆盖默认的未捕获异常对话框?

C# 如何覆盖默认的未捕获异常对话框?,c#,winforms,exception-handling,C#,Winforms,Exception Handling,当.NET应用程序中出现异常时,虚拟机会向用户显示一条错误消息。我希望能够显示我自己的错误消息,而不必在我的应用程序的顶层放置catch块(因为这会使调试未捕获的异常更加乏味) 现在,我在AppDomain.UnhandledException事件侦听器中显示自己的错误对话框,但是.NET创建的对话框仍然会显示出来。我还希望避免使用环境。FailFast,因为这样会绕过我的最终块(我仍然有点依附于它)。WP7中的类似模式如何 // Code to execute on Unhandled

当.NET应用程序中出现异常时,虚拟机会向用户显示一条错误消息。我希望能够显示我自己的错误消息,而不必在我的应用程序的顶层放置
catch
块(因为这会使调试未捕获的异常更加乏味)


现在,我在
AppDomain.UnhandledException
事件侦听器中显示自己的错误对话框,但是.NET创建的对话框仍然会显示出来。我还希望避免使用
环境。FailFast
,因为这样会绕过我的
最终
块(我仍然有点依附于它)。

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();
        }
    }

Windows窗体有一个内置的异常处理程序,默认情况下,当没有附加调试器时,该处理程序会捕获未经处理的托管异常,该异常发生在窗口消息处理过程中,并且在App.Config中jitdegrough=false。然后向最终用户显示一个对话框,并防止应用程序终止

您可以在HKLM\Software\Microsoft\.NetFramework下更改注册表设置DbgJitDebugLaunchSetting。我知道这有三个价值观之一:

  • 0:显示询问“调试或终止”的用户对话框
  • 1:让异常通过CLR处理
  • 2:启动DbgManagedDebugger注册表项中指定的调试器
在Visual Studio中,转到工具>选项>调试>JIT以将此键设置为0或2。但值1通常是最终用户机器上需要的值


(请参阅)

如果这是WinForms,您必须处理并捕获它们。一些异常会过滤到其中一个,而另一些则会过滤到另一个


这里有一个类似的(但不是完全重复的)问题应该会有所帮助:

这是JIT的一个特性。我不确定是否有办法修改它……我可能会创建一个生产模式/开发模式配置变量,以便在顶层查看自己的对话框(和捕捉)和不查看对话框之间切换。对于调试来说,这也是一个好主意……这绝对是可能的,我记得RedGate在这方面做了一些工作。请参阅此产品和相关产品。我不确定他们是否有免费版本,但他们已经做到了,所以一定有办法!可能的重复我不确定这如何让我显示自定义消息。