如果在Dispatcher
掛起(Dispatcher.DisableProcessing()
調用)時嘗試顯示消息框,則會引發異常。如何檢測Dispatcher.DisableProcessing是否處於活動狀態?
InvalidOperationException:'調度程序處理已被暫停'(請參閱here)。
有誰知道我該如何檢測Dispatcher
的掛起位置(所以我知道何時撥打BeginInvoke()
)?
編輯1:
針對這一Application.DispatcherUnhandledException事件我想表現出一個MessageBox。但是,如果在DataBinding期間拋出此未處理的異常(即ItemsControl.ItemsSource
),則Dispatcher
已掛起。試圖顯示MessageBox
然後失敗。總是使用Dispatcher.BeginInvoke()
可以解決問題,但除非確實需要,否則我不想這樣做。
編輯2:
使用反射來實現這一點是這樣的:
var dispatcherType = typeof(Dispatcher);
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic);
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher);
var suspended = count > 0;
我建議你在這裏提供更多的細節,從而使問題完全就地。 – 2009-10-23 07:32:58