当 .NET 应用程序中未捕获异常时,虚拟机会向用户显示错误消息。我希望能够显示我自己的错误消息,而不必catch
在我的应用程序的顶层放置一个块(因为这会使调试未捕获的异常更加乏味)。
现在,我在AppDomain.UnhandledException
事件侦听器中显示我自己的错误对话框,但 .NET 创建的对话框仍然显示。我也想避免Environment.FailFast
,因为这会绕过我的finally
块(我仍然有些依恋)。
当 .NET 应用程序中未捕获异常时,虚拟机会向用户显示错误消息。我希望能够显示我自己的错误消息,而不必catch
在我的应用程序的顶层放置一个块(因为这会使调试未捕获的异常更加乏味)。
现在,我在AppDomain.UnhandledException
事件侦听器中显示我自己的错误对话框,但 .NET 创建的对话框仍然显示。我也想避免Environment.FailFast
,因为这会绕过我的finally
块(我仍然有些依恋)。
如果这是 WinForms,您必须处理AppDomain.UnhandledException和Application.ThreadException才能捕获它们。一些例外过滤到一个和其他过滤到另一个。
这里有一个类似(但不完全重复)的问题应该有所帮助:C# - WinForms - 事件的异常处理
Windows Forms 有一个内置的异常处理程序,默认情况下在没有附加调试器时捕获未处理的托管异常,并且在窗口消息处理期间发生异常,并且App.Config 中的jitDebugging = false。然后它会向最终用户显示一个对话框并防止应用程序终止。
您可以更改HKLM\Software\Microsoft\.NetFramework下的注册表设置DbgJitDebugLaunchSetting。这具有我知道的三个值之一:
在 Visual Studio 中,转到工具 > 选项 > 调试 > JIT将此键设置为 0 或 2。但值 1 通常是您在最终用户的机器上想要的值
(参见http://msdn.microsoft.com/en-us/library/2ac5yxx6(v=vs.90).aspx)
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();
}
}