2010-09-07 59 views
0

在窗體上的我的加載事件中,我調用try catch塊中的某個方法。發生異常時,我向用戶顯示一條消息,之後我想關閉表單。它看起來像這樣(代碼Load事件):爲什麼Close()在加載事件中關閉窗體?

try 
{ 
    Metehod(); 
} 
catch(DatabaseException ex) 
{ 
    MessageBox.show("db error! " + ex.Message); 
    this.Close(); 
} 
catch(Exception ex) 
{ 
    MessageBox.Show("Unknown error!" + ex.Message); 
    this.Close(); 
} 

但是,當this.CLose()被調用,它不關閉的形式,沒有,代碼繼續運行,直至負荷事件的結束!

這是爲什麼?這是合乎邏輯的行爲?

回答

4

是的,這是合乎邏輯的行爲。調用Close()不會將控制權返回給調用者。除非另有說明,否則該方法將繼續執行。在每個this.Close()之後輸入return這個技巧。

3

這是設計,因爲Loadoccurs之前一個窗體是第一次顯示。因此,Close()自從三個事件發生在Formlife cycle之後都沒有影響,表格顯示。

要停止循環,請使用devnull解決方案。