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

Mur*_*uri 10 wpf dispatcher

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

InvalidOperationException:'Dispatcher processing has a suspended'(参见此处).

有谁知道我怎么能检测到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;
Run Code Online (Sandbox Code Playgroud)

Anv*_*aka 0

那里没有公共界面,因此您没有合法的方式来判断它是否被暂停。您仍然可以使用反射,但一般来说,这表明您正在做一些完全错误的事情。

如果您能给我们更多详细信息,我们可以建议适当的解决方案吗?

  • 为了响应 Application.DispatcherUnhandledException 事件,我试图显示一个 MessageBox。但是,如果在数据绑定(即 ItemsControl.ItemsSource)期间引发此未处理的异常,则调度程序将挂起。尝试显示消息框失败。始终使用 Dispatcher.BeginInvoke() 可以解决问题,但除非确实必要,否则我不想这样做。 (4认同)