为什么Close()不关闭load事件中的表单?

时间:2010-09-07 08:12:06

标签: .net winforms

在表单上的load事件中,我在try catch块中调用了一些方法。当发生异常时,我向用户显示一条消息,之后我想关闭该表单。它看起来像这样(Load事件中的代码):

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()时,它不会关闭表单,不会,代码会一直运行直到加载事件结束!

这是为什么?这是合乎逻辑的行为吗?

2 个答案:

答案 0 :(得分:4)

是的,这是合乎逻辑的行为。调用Close()不会将控制权返回给调用者。除非另有说明,否则该方法将继续执行。在return之后加this.Close()就可以了。

答案 1 :(得分:3)

这是设计原因,因为Load occurs 之前首次显示表单。因此Close()之后的Form life cycle中的三个事件显示{{1}}无效。

要停止循环,请使用devnull解决方案。