Почему Close () не закрывает форму в событии load? - PullRequest
0 голосов
/ 07 сентября 2010

В моем событии загрузки формы я вызываю некоторый метод в блоке 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 ]

4 голосов
/ 07 сентября 2010

Да, это логичное поведение. Вызов Close () не возвращает управление вызывающей стороне. Метод продолжит выполнение, если вы не укажете иначе. Помещение return после каждого this.Close() делает трюк.

3 голосов
/ 07 сентября 2010

Это специально, потому что Load происходит до , когда форма отображается впервые. Так что Close() не имеет никакого эффекта, так как три события позже в жизненном цикле Form , форма отображается.

Чтобы остановить цикл, используйте решение devnull.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...