Возникает исключение, если кто-то пытается показать окно сообщения, если Dispatcher
приостановлен (Dispatcher.DisableProcessing()
вызван).
InvalidOperationException: 'Обработка диспетчера приостановлена' (см. здесь ).
Кто-нибудь знает, как я могу определить, где Dispatcher
приостановлен или нет (поэтому я знаю, когда звонить BeginInvoke()
)?
Редактировать 1:
В ответ на событие Application.DispatcherUnhandledException я пытаюсь показать MessageBox. Однако, если это необработанное исключение было выдано во время привязки данных (т. Е. ItemsControl.ItemsSource
), Dispatcher
приостанавливается. Попытка показать MessageBox
не удалась. Всегда использование Dispatcher.BeginInvoke()
решает проблему, но я не хочу этого делать, если это действительно необходимо.
Редактировать 2:
Использование Reflection для выполнения этой работы выглядит так:
var dispatcherType = typeof(Dispatcher);
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic);
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher);
var suspended = count > 0;