Se genera una excepción si se intenta mostrar un cuadro de mensaje si se suspende el Dispatcher
(se llama al Dispatcher.DisableProcessing()
).¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
InvalidOperationException: 'El proceso de Dispatcher se ha suspendido' (ver here).
¿Alguien sabe cómo puedo detectar cuando el Dispatcher
se suspende o no (por lo que saben cuándo llamar BeginInvoke()
)?
Edición 1:
Como reacción al evento Application.DispatcherUnhandledException Estoy tratando de mostrar un cuadro de mensaje. Sin embargo, si esta Excepción no controlada se lanzó durante DataBinding (es decir, ItemsControl.ItemsSource
), se suspende el Dispatcher
. Si intenta mostrar un MessageBox
, falla. Usar siempre Dispatcher.BeginInvoke()
resuelve el problema, pero no quiero hacerlo a menos que sea realmente necesario.
Edición 2:
utilizando la reflexión de lograr esto funciona así:
var dispatcherType = typeof(Dispatcher);
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic);
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher);
var suspended = count > 0;
Sugiero que usted proporciona más detalles aquí, con lo que la pregunta completa en el lugar. –