如果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;
答案 0 :(得分:0)
那里没有公共界面,所以你没有合法的方式来说明它是否被暂停。你仍然可以使用反射,但一般来说这表明你做的事情完全错了。
如果您能提供更多详细信息,我们可以提出正确的解决方案吗?
答案 1 :(得分:-2)
试试这个:
if(currentDispatcher.Thread.ThreadState == System.Threading.ThreadState.Suspended)
{
}