如果在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