c# – 为什么我的Catch块只在Visual Studio中调试时运行?

前端之家收集整理的这篇文章主要介绍了c# – 为什么我的Catch块只在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中,我有一个按钮,代码抛出新的异常(“”);.

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

为什么有区别?

我使用的是Visual Studio 2010,.NET 4.0,Windows XP.

解决方法

这是因为Windows Forms应用程序的标准异常处理在附加Visual Studio调试器时的行为不同 – 通常,Application.Run方法中内置的异常处理程序捕获未处理的异常,以便可以执行以下操作:

如果允许将异常抛出到Application.Run方法之外,那么如果用户按“继续”(因为catch位于消息泵外),则会阻止应用程序继续.

当调试时,这被禁用,大概是这样,调试器将在未处理的异常而不是上面显示的对话框中直接跳转到调试模式.

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

你绝对不会因此而迷惑:

> Is try/catch around whole C# program possible?
> Exception handling problem in release mode(这个问题是误导性的 – 这与发布/调试构建设置无关)
> C# Exceptions only caught when debugging?

猜你在找的C#相关文章