Dispatcher
が中断されている (Dispatcher.DisableProcessing()
呼び出された)場合にメッセージ ボックスを表示しようとすると、例外が発生します。
InvalidOperationException: 'Dispatcher の処理が中断されました' (こちらを参照)。
Dispatcher
が中断されているかどうかを検出する方法を知っている人はいますか(したがって、いつ呼び出すBeginInvoke()
かがわかります)。
編集1:
Application.DispatcherUnhandledException イベントに反応して、MessageBox を表示しようとしています。ただし、この未処理の Exception が DataBinding 中にスローされた場合 (つまりItemsControl.ItemsSource
)Dispatcher
は中断されます。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;