2009-10-23 16 views
9

Eine Ausnahme wird ausgelöst, wenn versucht wird, ein Meldungsfeld anzuzeigen, wenn ausgesetzt ist (Dispatcher.DisableProcessing() genannt).Wie kann ich feststellen, ob Dispatcher.DisableProcessing aktiv ist?

InvalidOperationException: 'Dispatcher-Verarbeitung wurde ausgesetzt' (siehe here).

Wer weiß, wie ich erkennen kann, wo die Dispatcher ausgesetzt ist oder nicht (so weiß ich, wann BeginInvoke() nennen)?

Edit 1:

In Reaktion auf das Application.DispatcherUnhandledException Ereignis Ich versuche, eine MessageBox zu zeigen. Wenn diese nicht behandelte Ausnahme während DataBinding (d. H. ItemsControl.ItemsSource) ausgelöst wurde, wird die Dispatcher jedoch ausgesetzt. Der Versuch, eine MessageBox anzuzeigen, schlägt fehl. Immer mit Dispatcher.BeginInvoke() löst das Problem, aber ich möchte das nicht tun, es sei denn wirklich notwendig.

Edit 2:

Reflection Mit dieser funktioniert wie folgt zu erreichen:

var dispatcherType = typeof(Dispatcher); 
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic); 
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher); 
var suspended = count > 0; 
+0

Ich schlage vor, Sie weitere Details hier bieten, so dass die Frage vollständig an Ort und Stelle zu machen. –

Antwort

0

Es gibt es keine öffentliche Schnittstelle, so dass Sie keine rechtliche Möglichkeit haben, zu sagen, ob es ausgesetzt ist oder nicht. Du kannst immer noch nachdenken, aber im Allgemeinen zeigt dies an, dass du etwas völlig falsch machst.

Wenn Sie uns mehr Details geben könnten, könnten wir Ihnen die richtige Lösung vorschlagen?

+1

Als Reaktion auf das Application.DispatcherUnhandledException-Ereignis versuche ich eine MessageBox anzuzeigen. Wenn diese nicht behandelte Ausnahme während DataBinding (d. H. ItemsControl.ItemsSource) ausgelöst wurde, wird der Dispatcher jedoch ausgesetzt. Der Versuch, eine MessageBox anzuzeigen, schlägt fehl. Immer mit Dispatcher.BeginInvoke() löst das Problem, aber ich möchte das nicht tun, es sei denn wirklich notwendig. – Muri

-1

versuchen Sie dies:

if(currentDispatcher.Thread.ThreadState == System.Threading.ThreadState.Suspended) 
{ 

} 
+0

Dies funktioniert nicht. Der threadState ist während eines DisableProcessing-Zeitraums immer noch "ausgeführt". –

Verwandte Themen