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[] { });
}
Эта функция отлично работала до сих пор. Я только что получил это исключение:
Что это значит и как мне это предотвратить?
1 ответ
Решение
Проблема здесь в том, что нить, к которой ISynchronizeInvoke
объект был связан с больше не существует. Это может произойти, например, если вы порождаете фоновый поток и поток пользовательского интерфейса завершается до завершения фоновой задачи. Поток больше не существует, следовательно, не к чему вызывать, и вы получите исключение.
Нет хорошего способа предотвратить это. Лучший способ действий - это обернуть Invoke
позвонить в try / catch
который обрабатывает это исключение.