如果在.NET应用程序中未捕获异常,则虚拟机会向用户显示错误消息。我希望能够显示我自己的错误消息,而不必在我的应用程序的顶层放置catch
块(因为这会使调试未捕获的异常更加繁琐)。
现在我在AppDomain.UnhandledException
事件监听器中显示自己的错误对话框,但仍然会显示.NET创建的对话框。我还想避免使用Environment.FailFast
,因为这会绕过我的finally
块(我仍然有点依附)。
答案 0 :(得分:5)
如果这是WinForms,则必须处理AppDomain.UnhandledException和Application.ThreadException才能捕获所有内容。一些例外过滤到另一个例外,其他例外过滤到另一个例外。
这里有类似(但不完全相同)的问题应该有所帮助:C# - WinForms - Exception Handling for Events
答案 1 :(得分:1)
Windows窗体有一个内置的异常处理程序,默认情况下在没有连接调试器时捕获未处理的托管异常,并且在窗口消息处理期间发生异常,并且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)
答案 2 :(得分: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();
}
}