加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:25:59 所属栏目:百科 来源:网络整理
导读:Program.cs中的代码 [STAThread]static void Main(){ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new Form1()); } catch (Exception ex) { MessageBox.Show("Blah..."); }} 在Form1中
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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读