【发布时间】:2011-02-19 05:23:54
【问题描述】:
我有一个简单的 WinForms 应用程序,用于输入测试用例。自从我将此应用程序升级到 .NET 4.0 并在选项卡页控件中添加了一个新选项卡页以针对 XSD 架构验证 XML 以来,应用程序一直在随机崩溃。我一直无法重现异常。
我的 QA 人员收到的错误是通用 Windows 消息:
TestCaseViewer 遇到问题需要关闭。给您带来的不便,我们深表歉意。
为了解决真正的错误,我在程序的 Main 方法的开头添加了以下代码:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += Application_ThreadException;
事件处理程序如下所示:
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
MessageBox.Show(e.Exception.ToString(), @"Thread Exception",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
Application.Exit();
}
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
var ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.ToString(), @"Unhandled Exception",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
Application.Exit();
}
}
不幸的是,这并没有帮助,无论是什么错误都会继续这样做,从而产生未处理的错误,并冒泡到操作系统。
谁能给我关于捕获此异常的任何其他想法?
【问题讨论】:
-
堆栈跟踪? MessageBox.Show(e.Stacktrace);
-
只要堆栈跟踪不为空,就会在异常调用 ToString() 时返回。
标签: winforms exception unhandled