1

我的应用程序中有以下代码,它正在处理以下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 没有任何忽略未处理异常的属性或设置(尽管它不会让我感到惊讶)。

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

4

2 回答 2

3

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

Visual Studio 调试器无法捕获 Windows 窗体或 WPF 应用程序的未处理异常

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

于 2013-04-10T11:30:53.100 回答
0

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

如果您需要在 x64 中构建,那么一种方法是使用菜单 Debug -> Exceltions 并选中所有“Thrown”复选框。这使得程序在所有异常上都停止,即使它们是在 Try..Catch 块中处理的。

于 2013-04-10T11:31:38.807 回答