繁体   English   中英

为什么我的 Catch 块仅在 Visual Studio 中调试时运行?

[英]Why is my Catch block only running while Debugging in Visual Studio?

Program.cs 中的代码

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    try
    {
        Application.Run(new Form1());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Blah...");
    }
}

在 Form1 中,我有一个带有代码throw new Exception("");的按钮。 .

如果我从 Visual Studio 运行应用程序,则会弹出我的消息框(带有消息“Blah ...”)。 但是如果我从可执行文件运行应用程序,那么 catch 块根本不会执行。

为什么有区别?

我正在使用 Visual Studio 2010、.NET 4.0、Windows XP。

这是因为 Windows Forms 应用程序的标准异常处理在附加 Visual Studio 调试器时表现不同 - 通常, Application.Run方法中内置的异常处理程序会捕获未处理的异常,以便它可以执行类似显示以下对话框的操作:

错误对话框

如果它允许在Application.Run方法之外引发异常,那么如果用户按下“继续”,它将阻止应用程序继续(因为捕获位于消息泵之外)。

然而,在调试时,它被禁用,大概是为了调试器将在未处理的异常上直接跳转到调试模式,而不是显示上述对话框。

如果您希望在 Windows Forms 应用程序中处理未处理的异常,那么您应该处理Application.ThreadException事件 或者,您可以使用Application.SetUnhandledExceptionMode方法更改此行为。

对此感到困惑的绝不是您一个人:

因为在RELEASE模式下,消息框必须显示你的应用程序将“死”,你不能通过显示 MessageBox 来阻止它。 调试模式下,VS 关心这一点,并在引发异常的行中断

问候。

我不明白为什么会发生这种情况,但尝试重建解决方案,如果有疑问我总是这样做。 它可能会或可能不会解决问题,您可能已经尝试过,但如果您还没有尝试过,它可能会为您解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM