sve*_*vit 9 c# exception .net-4.0
Program.cs中的代码
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show("Blah...");
}
}
Run Code Online (Sandbox Code Playgroud)
在Form1中,我有一个带代码的按钮throw new Exception("");
.
如果我从Visual Studio运行应用程序,则弹出我的消息框(消息'Blah ...').但是如果我从可执行文件运行应用程序,那么catch块根本不会执行.
为什么不同?
我使用的是Visual Studio 2010,.NET 4.0,Windows XP.
Jus*_*tin 16
这是因为当附加Visual Studio调试器时,Windows窗体应用程序的标准异常处理行为会有所不同 - 通常,Application.Run
方法中内置的异常处理程序会捕获未处理的异常,以便它可以执行以下操作:
如果它允许在Application.Run
方法之外抛出异常,那么如果用户按下"继续"(因为捕获在消息泵之外),它将阻止应用程序继续.
但是在调试时会禁用它,大概是调试器会在未处理的异常上直接进入调试模式,而不是显示上面的对话框.
如果您希望在Windows窗体应用程序中处理未处理的异常,那么您应该处理该Application.ThreadException
事件.或者,您可以使用Application.SetUnhandledExceptionMode
方法更改此行为.
你绝不会因此而感到困惑: