什么控制WinForms中的默认UnhandledException策略?

Ani*_*Ani 6 .net unhandled-exception winforms

我目前正在维护一个WinForms应用程序,它监听Application.ThreadException事件以捕获GUI线程上未处理的异常.

现在,直到最近,事情一直在发挥作用.但最近,这个事件不再适用于某些生产箱; 当GUI线程上存在未处理的异常时,应用程序会跳过处理程序并崩溃.奇怪的是,我能够在我的(新)开发盒上重现这个,但是有些机器事实上正在被正确引发.

通过显式设置这样的策略,我能够使行为保持一致:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Run Code Online (Sandbox Code Playgroud)

但我很想知道什么控制默认策略.MSDN对"应用程序配置文件"进行了模糊的暗示,但我们的app.config或我知道的任何其他配置文件中都没有这样的策略设置.

导致这种不一致行为的原因是什么?

Han*_*ant 1

我能想到的只有一个。异常处理逻辑知道是否附加了调试器。当默认的 UnhandledExceptionMode.Automatic 生效时,这一点很重要。当附加调试器时,Winforms 消息循环不会尝试捕获异常。这相当重要,它会使调试异常变得相当困难。仅当异常未处理时,调试器才会介入并显示异常助手。

使用 UnhandledExceptionMode.CatchException 是可以的,它使异常处理保持一致。换句话说,它在您的开发计算机上的行为与在客户端计算机上的行为完全相同。但您现在需要“调试”+“异常”、“抛出框”来排除代码故障。当抛出异常时,无论是否捕获异常,调试器都会停止。