2010-09-07 33 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解决方案。