2016-06-13 106 views
1

我有两种形式。我的第一个表单上有一个按钮,当按钮被点击时它应该加载第二个表单。第二种形式在其Load事件中引发异常。显示第二种形式的代码位于try-catch块中。然而,这个try-catch块没有捕获异常,当我单击按钮时,我得到一个“未处理的异常”窗口。代码如下:无法从Form.Show中捕捉异常

public partial class FirstForm : Form 
{ 
    private void button_Click(object sender, EventArgs e) 
    { 
     try 
     { 
     // Showing this form will throw an exception 
     SecondForm form = new SecondForm(); 
     form.Show(); 
     } 
     catch (Exception ex) 
     { 
     // The exception is not caught here 
     MessageBox.Show(ex.ToString()); 
     } 
    } 
} 

public partial class SecondForm : Form 
{ 
    // Throw an exception when this form is shown 
    private void form_Load(object sender, EventArgs e) 
    { 
     throw new Exception("something"); 
    } 
} 

为什么在我的代码中没有发现异常?

+0

[MSDN论坛上的分享](https://social.msdn.microsoft.com/Forums/vstudio/en-US/b8c82b79-47d4-42ab-abdb-ff71d67a0022/异常抛出功能于formload事件-IS-永不卡住通过-IDE?论坛= vsdebug)。该决议并不真实清楚,但可能会帮助 –

+0

看看[这](http://stackoverflow.com/questions/3209706/why-the-form-load-cant-catch-exception)SO问题(最后回答)。 –

+0

在发布我的问题之前,我尝试了这些解决方案。在我的构建设置中,“首选32位”选项已被取消选中。我在Windows 10上,并且回答说这个问题在Windows 8及更高版本中得到了解决,但我仍然遇到了问题。我看到的答案是关于异常在调试器运行时被默默吞下或者只是一个问题,但这不是我正在经历的。我的异常冒出来,导致程序崩溃,所以它们不会被唤醒,但它们不允许我处理它们。 –

回答

0

当您显示第二个窗体时,可以使用ShowDialog(this)而不是Show方法,以使第一个窗体控制第二个窗体。 无论使用ShowDialog(this),您都能够排除异常。我认为这个问题已经有一个答案here

+0

我试过了,这个异常仍然没有被我的try-catch抓住。 –