如果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)
那里没有公共界面,因此您没有合法的方式来判断它是否被暂停。您仍然可以使用反射,但一般来说,这表明您正在做一些完全错误的事情。
如果您能给我们更多详细信息,我们可以建议适当的解决方案吗?