Viene sollevata un'eccezione se si tenta di mostrare una finestra di messaggio se lo Dispatcher
è sospeso (chiamato Dispatcher.DisableProcessing()
).Come posso rilevare se Dispatcher.DisableProcessing è attivo?
InvalidOperationException: "L'elaborazione del dispatcher è stata sospesa" (vedere here).
qualcuno sa come posso rilevare dove il Dispatcher
è sospeso o no (quindi so quando chiamare BeginInvoke()
)?
Edit 1:
In reazione alla manifestazione Application.DispatcherUnhandledException che sto cercando di mostrare un MessageBox. Tuttavia, se questa eccezione non gestita è stata generata durante DataBinding (ad esempio ItemsControl.ItemsSource
), lo Dispatcher
viene sospeso. Cercando di mostrare un MessageBox
allora fallisce. Usare sempre Dispatcher.BeginInvoke()
risolve il problema, ma non voglio farlo se non è veramente necessario.
Edit 2:
utilizzando la riflessione per raggiungere questo funziona in questo modo:
var dispatcherType = typeof(Dispatcher);
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic);
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher);
var suspended = count > 0;
ti suggerisco di fornire maggiori dettagli qui, rendendo così la questione completa sul posto. –