.net XP和Vista中不同的异常处理

.net XP和Vista中不同的异常处理,.net,winforms,exception,exception-handling,.net,Winforms,Exception,Exception Handling,我有个奇怪的问题。假设你有以下几点: Application.ThreadException += something; try { Application.Run(new Form1()); } catch (Exception ex) { } 现在假设应用程序中某个地方发生异常,Vista会引发ThreadException事件,但XP会直接跳转到catch块 我如何使操纵行为保持一致?在something中,我需要处理一些清理工作,但XP从来没有这样做过。因此,FormClosi

我有个奇怪的问题。假设你有以下几点:

Application.ThreadException += something;

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

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

我如何使操纵行为保持一致?在
something
中,我需要处理一些清理工作,但XP从来没有这样做过。因此,
FormClosing
事件永远不会从catch块触发,因为所有表单都是在该阶段处理的

注:

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

谢谢

您可以订阅
AppDomain.CurrentDomain.UnhandledException
事件。如果应用程序不处理其异常,则始终会抛出该异常

顺便说一句,就我所知,在Application.Run()语句中使用try-catch被认为是不好的做法。

可能Vista上的默认值不同?你有没有试过使用这个设置?您可以通过调用

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

我也不想这样处理,但这似乎是在XP中捕获(但不是处理)它们的唯一方法(作为最后手段)。这是因为您在catch块中处理异常。使用未处理的异常处理程序或尝试捕获应用程序;应用这两种方法都不行,至少在XP下不行:)嗯,听起来很可疑,让我试试:)“应用程序中的某个地方”意味着它发生在主线程或其他线程中?异常发生在主/UI线程中。啊,很久以前就看到了,明天将从工作中看到它做了什么(平均时间+1;p)