2010-09-17 91 views
2

当我通过在bin调试文件夹中执行exe文件运行我的程序时,为什么我看不到带有异常详细信息的MessageBox?看不到消息框

我从Visual Studio调试(运行)程序时看到异常。

[STAThread] 
static void Main() 
{ 
    try 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
    catch (Exception ex) 
    { 
     if (MessageBox.Show(
      string.Format("There were unhandeled exceptions. Would you like to continue using this program?"), 
      "Fatal Error", 
      MessageBoxButtons.YesNo, 
      MessageBoxIcon.Error) == System.Windows.Forms.DialogResult.No) 
       Application.Exit(); 
    } 
} 

编辑
这里是产生异常的代码:

private void button1_Click(object sender, EventArgs e) { 
    int num = 1; 
    num = num/(num - num); 
} 
+0

奇怪的是,当我测试这个时,我确实看到了这个消息框...... – 2010-09-17 10:37:14

+5

“有没有发生异常的情况,是/否?即将到来的每日WTF,如果有的话,我看到一个... – Rushyo 2010-09-17 10:40:08

+0

即使您回答否,程序将退出您的示例。你想达到什么目的?如果你想处理未处理的异常并且不一定退出程序,还有其他方法可以执行此操作。另外,线程(BackgroundWorker,BeginInvoke,线程,任务等)抛出异常吗? – 2010-09-17 10:42:11

回答

3

加入这一行:

try 
{ 
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException); 
    ... 

显然调试时的默认值是不同的。我不知道那些细节。

另请注意,您的if(...) Application.Exit();在这里并不真正有用,它不应该。
不要尝试重新启动或任何事情。

+0

+1,这是正确的。调试器连接时,消息循环的行为不同。使调试异常变得容易。 – 2010-09-17 10:48:07