为什么我的Catch块只在Visual Studio中调试时运行? [英] Why is my Catch block only running while Debugging in Visual Studio?

查看:172
本文介绍了为什么我的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中,我有一个代码 throw new Exception();



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



为什么有区别?



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

解决方案

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





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



当调试时,这被禁用,大概是调试器将跳转直接进入未处理异常的调试模式,而不是显示上述对话框。



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



您绝对不会因此而迷惑:



查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆