AsyncCallback выдает исключение - PullRequest
0 голосов
/ 07 июля 2011

В Winform я получаю исключение: «Invoke или BeginInvoke не могут быть вызваны для элемента управления до тех пор, пока дескриптор окна не будет создан» во время AsyncCallback.

Приложение работает нормально на других компьютерах.Мне было интересно, может ли быть компьютер или сетевые настройки, которые могут быть ответственны за исключение.Обратный вызов является междоменным обратным вызовом, однако все данные принимаются и отображаются в Winform, затем возникает исключение.

Исключением является фатальное исключение, и появляется сообщение Windows "Приложение .. перестало работать".

РЕДАКТИРОВАТЬ 1:

public void OpenFormCallback(IAsyncResult ar)
{
    // 'this' is a Winform  
    this.BeginInvoke(new DelegateVoid(SetDataSource));
}

Обычно это работает, теперь вв исключительном случае существует очень быстрое сетевое соединение, которое может быть причиной того, что дескриптор еще не создан.Просто понял, что.

Должен ли я попробовать:

public void OpenFormCallback(IAsyncResult ar)
    {
        // 'this' is a Winform  
        while (!this.IsHandleCreated) { }
        this.BeginInvoke(new DelegateVoid(SetDataSource));
    }

?Рискуете вечной петлей?

РЕДАКТИРОВАТЬ 2: Я пытался:

public void OpenFormCallback(IAsyncResult ar)
    {
        // 'this' is a Winform  
        if (IsHandleCreated) { CreateHandle() }
        this.BeginInvoke(new DelegateVoid(SetDataSource));
    }

Но основная форма не отображается, она приходит в состояние «Не отвечает».

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

Попробуйте это:

public void OpenFormCallback(IAsyncResult ar)
{
    while (!this.IsHandleCreated) { Application.DoEvents(); }
    this.BeginInvoke(new DelegateVoid(SetDataSource));
}
0 голосов
/ 07 июля 2011

Добавить проверку yourform.IsHandleCreated перед вызовом invoke / BeginInvoke из вашего обратного вызова

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