4

我刚刚在.Net 中遇到了异常处理的奇怪行为。(我在 MS Visual Studio 2008 中使用 C#,但我在这里看到的一个问题似乎暗示我所看到的在整个 .Net 世界中都是正确的。)我正在编写一个普通的 WinForm 应用程序。我故意在任何 try 块之外的 form_load 事件处理程序中引发未处理的异常。我没有收到任何通知。如果在正常方法中发生未处理的异常,则会弹出一条消息,告诉我发生了异常,并提供有关问题的一些信息。但是在处理程序中,代码只是悄悄地退出函数,而不让任何人知道它发生了。如果我添加一个 try/catch 块,则会按预期捕获异常。

这种行为是否确实发生在所有事件处理程序中?这是预期的行为吗?如果是这样,是不是因为如果事件处理程序意外停止,就会有太多坏事发生的危险?

4

1 回答 1

1

无论是在 VS 内部还是外部,当有一个调试器附加到进程时,就会发生这种行为。但是,作为调试版本没有区别。如果在没有附加调试器的情况下在 VS 外部运行,则会触发未处理的异常。你可以检查

为什么表单加载无法捕获异常?, 并且 VS2010 不会在 64 位版本的 Windows 上的 WinForms 应用程序中显示未处理的异常消息,以寻求可能的解决方案。

编辑:据我所知,此行为仅特定于 form_load 事件处理程序。

于 2013-10-01T06:22:26.837 回答