XP和Vista中的异常处理不同

时间:2010-01-05 12:24:34

标签: .net winforms exception exception-handling

我有一个奇怪的问题。假设您有以下内容:

Application.ThreadException += something;

try
{
  Application.Run(new Form1());
}
catch (Exception ex)
{

}

现在在应用程序的某个地方发生异常,Vista会引发ThreadException事件,但XP会直接跳转到catch块。

如何使处理行为相同?在something我需要处理一些清理工作,但它永远不会用XP。因此,FormClosing事件永远不会从catch块触发,因为所有表单都在该阶段处理。

注意:

  • 两个系统都运行.NET 3.5 SP1,版本相同
  • 唯一不同的是操作系统

由于

2 个答案:

答案 0 :(得分:2)

您可以订阅AppDomain.CurrentDomain.UnhandledException活动。如果应用程序没有处理它的异常,那总是抛出。

顺便说一句,据我所知,围绕Application.Run()语句的try-catch被认为是不好的做法。

答案 1 :(得分:1)

也许UnhandledExceptionMode在Vista上有不同的默认值?你试过这种设置吗?您可以通过调用

显式强制模式
// Set the unhandled exception mode to force all Windows Forms errors to go 
// through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);