如何检测Dispatcher.DisableProcessing是否处于活动状态?

时间:2009-10-23 07:27:33

标签: wpf dispatcher

如果Dispatcher被暂停(Dispatcher.DisableProcessing()被调用),则尝试显示消息框时会引发异常。

  

InvalidOperationException:'调度程序处理已被暂停'(参见here)。

是否有人知道如何检测Dispatcher被暂停的位置(我知道何时致电BeginInvoke())?

编辑1:

在响应Application.DispatcherUnhandledException事件时,我正在尝试显示MessageBox。但是,如果在DataBinding(即ItemsControl.ItemsSource)期间抛出此未处理的异常,则Dispatcher将被暂停。试图显示MessageBox然后失败。始终使用Dispatcher.BeginInvoke()解决问题,但除非确实有必要,否则我不想这样做。

编辑2:

使用Reflection完成此操作的方式如下:

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

2 个答案:

答案 0 :(得分:0)

那里没有公共界面,所以你没有合法的方式来说明它是否被暂停。你仍然可以使用反射,但一般来说这表明你做的事情完全错了。

如果您能提供更多详细信息,我们可以提出正确的解决方案吗?

答案 1 :(得分:-2)

试试这个:

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

}