未处理的异常不会停止执行

时间:2013-04-10 11:19:15

标签: .net vb.net exception exception-handling unhandled-exception

我的应用程序中有以下代码,它处理Load中的System.Windows.Forms.Form事件:

Private Sub frmBillingPoller_Load(ByVal eventSender As System.Object, ByVal eventArgs As EventArgs) Handles MyBase.Load

       Throw New Exception("I should be unhandled")

End Sub

当我在方法签名上放置断点时,我可以看到调用堆栈中的任何地方都没有Try...Catch语句。据我所知,VB.NET没有任何属性或设置忽略未处理的异常(虽然它不会让我感到惊讶)。

那么为什么在这种特殊情况下异常不会停止执行?

2 个答案:

答案 0 :(得分:3)

我建议你阅读这篇文章,解释当x64位操作系统上的form_load事件有异常并且你的应用程序是为AnyCPU编译时会发生什么(意味着你的代码以64位代码执行)

Visual Studio debugger fails to catch unhandled exception for a Windows Form or WPF Application

用我非常简单的术语来说。在上面的场景中,OS64捕获异常并且未通知调试器。所以你没有看到任何异常,但是form_load事件停止运行 如果在异常之后编写其他代码,如果它在try / catch块中,您将看到catch块代码未执行。控件返回到您显示表单的行。

答案 1 :(得分:0)

将项目定义更改为编译AnyCPU或显式编译为x86

如果你需要在x64中构建,那么一种方法是使用菜单Debug - > Excel并检查所有'Thrown'复选框。这使程序暂停所有异常,即使它们是在Try..Catch块中处理的。