Когда создается дескриптор окна - PullRequest
2 голосов
/ 09 мая 2011

Я думал, что мой код безопасен, но это не так.

Я использую форму для отображения некоторых сообщений, которые создаются и управляются где-то еще в моем приложении.

Чтобы добраться дов этом сообщении я использую делегата, который добавляю к своему внешнему событию в событии form.load.

private void ErrorLog_Load( object sender, EventArgs e )
{
    //error handler has been properly initialized in the ctor
    Handler.getInstance( ).errorOccured += errorHandler;
}

I Обратный вызов той формы, которую мне нужно вызвать:

protected void handleError( SenderInfo sender, ErrorEventArgument argument )
{
    if (this.InvokeRequired)
    {
        this.Invoke(errorHandler, new object[] { sender, argument });
    }
    else
    {
       //update the form
    }
}

И в закрытом / закрытом событии обратный вызов не зарегистрирован.

Теперь у меня есть ситуация, когда окно создается как дочерний элемент mdi, явно не показанный (скрытый другим окном mdi), и приложение вылетает в handleError встрока с Invoke с сообщением о том, что дескриптор окна не был создан.

Итак, три вопроса: в какой момент времени дескриптор окна формы, созданной Appart от добавления this.IsHandleCreated к моему handleErrorКак мне улучшить свой код? Как правильно отменить регистрацию обратного вызова?

TIA

Mario

1 Ответ

1 голос
/ 07 октября 2011

I думаю дескриптор должен быть создан при вызове события HandleCreated (доступно в .NET 3.5, но оно скрыто в конструкторе), но я не думаю, что это действительно тактак же вам нужно получить this.Handle.Я видел лучшее событие в .NET 4 документах, но я точно не знаю об этом.Самый стабильный способ, который я придумал в v3.5, это что-то вроде этого в конструкторе, но окно, кажется, вспыхивает, поэтому не уверен, что это будет работать, когда окно не станет видимым:1007 * Полагаю, вы бы отменили свой обратный вызов в событии FormClosing.

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