Форма Invoke вызывает странное исключение - PullRequest
1 голос
/ 25 сентября 2011

У меня есть следующий метод внутри формы

public void Bye()
{
     if (InvokeRequired && IsHandleCreated)
     {
         Invoke(new Action(Bye));
         return;
     }
     Close();
}

Эта форма создается в потоке основной формы, но этот метод вызывается из System.Threading.Timer обратного вызова.Таймер создается в методе Main перед вызовом Application.Run.

В моем приложении много таких форм с помощью метода Bye.Таймер вызывает метод Bye случайной формы каждую секунду.Если я продолжаю работу приложения в течение нескольких минут, я получаю исключение при вызове Invoke.Сообщение об исключении:

Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

Странно то, что при возникновении исключения Visual Studio сообщает мне, что InvokeRequired и IsHandleCreated имеют значение falseКак он мог даже попытаться вызвать Invoke в этом случае?Чего мне не хватает?

1 Ответ

1 голос
/ 25 сентября 2011

Изменить порядок:

if (IsHandleCreated && InvokeRequired)

Относительно отладчика VS: он может оценить оба свойства, чтобы отобразить их результаты в окне Watch, и в этот момент они могут вернуть false.

...