Dispatcher
如果在挂起(Dispatcher.DisableProcessing()
调用)的情况下尝试显示消息框,则会引发异常。
InvalidOperationException:“调度程序处理已暂停”(请参见此处)。
有谁知道我怎样才能检测到在哪里Dispatcher
被暂停(所以我知道什么时候打电话BeginInvoke()
)?
编辑1:
作为对 Application.DispatcherUnhandledException 事件的反应,我试图显示一个 MessageBox。但是,如果在 DataBinding(即ItemsControl.ItemsSource
)期间抛出了这个未处理的异常,则该异常被Dispatcher
挂起。试图显示 a MessageBox
then 失败。总是使用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;