C# 如何覆盖默认的未捕获异常对话框?
当.NET应用程序中出现异常时,虚拟机会向用户显示一条错误消息。我希望能够显示我自己的错误消息,而不必在我的应用程序的顶层放置C# 如何覆盖默认的未捕获异常对话框?,c#,winforms,exception-handling,C#,Winforms,Exception Handling,当.NET应用程序中出现异常时,虚拟机会向用户显示一条错误消息。我希望能够显示我自己的错误消息,而不必在我的应用程序的顶层放置catch块(因为这会使调试未捕获的异常更加乏味) 现在,我在AppDomain.UnhandledException事件侦听器中显示自己的错误对话框,但是.NET创建的对话框仍然会显示出来。我还希望避免使用环境。FailFast,因为这样会绕过我的最终块(我仍然有点依附于它)。WP7中的类似模式如何 // Code to execute on Unhandled
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在这方面做了一些工作。请参阅此产品和相关产品。我不确定他们是否有免费版本,但他们已经做到了,所以一定有办法!可能的重复我不确定这如何让我显示自定义消息。