2016-06-13 104 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抓住。 –