在表单上的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()
时,它不会关闭表单,不会,代码会一直运行直到加载事件结束!
这是为什么?这是合乎逻辑的行为吗?
答案 0 :(得分:4)
是的,这是合乎逻辑的行为。调用Close()不会将控制权返回给调用者。除非另有说明,否则该方法将继续执行。在return
之后加this.Close()
就可以了。
答案 1 :(得分:3)
这是设计原因,因为Load
occurs 之前首次显示表单。因此Close()
之后的Form
life cycle中的三个事件显示{{1}}无效。
要停止循环,请使用devnull解决方案。