Une exception est levée si l'on tente d'afficher une boîte de message si le Dispatcher
est suspendu (Dispatcher.DisableProcessing()
appelé).Comment puis-je détecter si Dispatcher.DisableProcessing est actif?
InvalidOperationException: 'traitement répartiteur a été suspendu' (voir here).
Est-ce que quelqu'un sait comment je peux détecter où le Dispatcher
est suspendu ou non (donc je sais quand appeler BeginInvoke()
)?
Edit 1:
En réaction à l'événement Application.DispatcherUnhandledException je suis en train de montrer un MessageBox. Toutefois, si cette exception non gérée a été levée pendant DataBinding (c'est-à-dire ItemsControl.ItemsSource
), le Dispatcher
est suspendu. Essayer de montrer un MessageBox
échoue ensuite. Toujours en utilisant Dispatcher.BeginInvoke()
résout le problème, mais je ne veux pas faire cela, sauf si vraiment nécessaire.
Edit 2:
aide de la réflexion pour accomplir cela fonctionne comme ceci:
var dispatcherType = typeof(Dispatcher);
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic);
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher);
var suspended = count > 0;
Je vous suggère de fournir plus de détails ici, rendant ainsi la question complète en place. –