InvalidAsynchronousStateException в функции, которая проверяет необходимость вызова для управления

Я использую эту функцию любезно предоставлено пользователем переполнения стека для обновления элементов управления из 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 ответ

Решение

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

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

Другие вопросы по тегам