14

Dispatcherが中断されている (Dispatcher.DisableProcessing()呼び出された)場合にメッセージ ボックスを表示しようとすると、例外が発生します。

InvalidOperationException: 'Dispatcher の処理が中断されました' (こちらを参照)。

Dispatcherが中断されているかどうかを検出する方法を知っている人はいますか(したがって、いつ呼び出すBeginInvoke()かがわかります)。

編集1:

Application.DispatcherUnhandledException イベントに反応して、MessageBox を表示しようとしています。ただし、この未処理の Exception が DataBinding 中にスローされた場合 (つまりItemsControl.ItemsSource)Dispatcherは中断されます。MessageBoxthenを表示しようとすると失敗します。常に使用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;
4

2 に答える 2

0

そこには公開インターフェースがないため、停止されているかどうかを合法的に判断する方法がありません。リフレクションは引き続き使用できますが、一般的に言えば、これは何か完全に間違っていることを示しています。

詳細を教えていただければ、適切な解決策を提案できますか?

于 2009-10-23T07:55:33.337 に答える
-4

これを試して:

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

}
于 2013-03-19T12:32:08.597 に答える