InvalidAsynchronousStateException в функции, которая проверяет необходимость вызова для управления - PullRequest
3 голосов
/ 05 ноября 2010

Эта функция любезно предоставлена ​​пользователем переполнения стека для обновления элементов управления BackgroundWorker.

static void SynchronizedInvoke(ISynchronizeInvoke sync, Action action)
{
    // If the invoke is not required, then invoke here and get out.
    if (!sync.InvokeRequired)
    {
        // Execute action.
        action();

        // Get out.
        return;
    }

    // Marshal to the required thread.
    sync.Invoke(action, new object[] { });
}

Эта функция отлично работала до сих пор. Я только что получил это исключение:

InvalidAsynchronousStateException

Что это значит и как мне это предотвратить?

1 Ответ

2 голосов
/ 05 ноября 2010

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

Нет хорошего способа предотвратить это.Лучший способ действий - заключить вызов Invoke в try / catch, который обрабатывает это исключение.

...