gpt4 book ai didi

c# - 为什么我的 Catch block 仅在 Visual Studio 中调试时运行?

转载 作者:太空狗 更新时间:2023-10-29 17:42:29 25 4
gpt4 key购买 nike

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 block 根本不会执行。

为什么不同?

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

最佳答案

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

Error dialog

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

然而,在调试时这是禁用的,大概是为了调试器会在出现未处理的异常时直接跳转到 Debug模式,而不是显示上面的对话框。

如果您希望在 Windows 窗体应用程序中处理未处理的异常,那么您应该处理 Application.ThreadException Event .或者,您可以使用 Application.SetUnhandledExceptionMode Method 更改此行为.

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

关于c# - 为什么我的 Catch block 仅在 Visual Studio 中调试时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6734287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com