Я думал, что мой код безопасен, но это не так.
Я использую форму для отображения некоторых сообщений, которые создаются и управляются где-то еще в моем приложении.
Чтобы добраться дов этом сообщении я использую делегата, который добавляю к своему внешнему событию в событии 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