/ / WPF:ディスパッチャーの処理は中断されましたが、メッセージはまだ処理されています-wpf、gridview、telerik、messagebox、radgridview

WPF:ディスパッチャ処理が中断されましたが、メッセージはまだ処理中です - wpf、gridview、telerik、messagebox、radgridview

私はWPFプロジェクトを持っていますが、RowLoadイベントでこのコードを実行しようとするとエラーが発生しました:

private void ParentGridView_OnRowLoaded(object sender, EventArgs e)
{
try
{
if(((RadGridView)sender).Columns != null)
{
MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

エラー:ディスパッチャーの処理は中断されましたが、メッセージはまだ処理中です。

GridViewコントロールはTelerik RadGridViewであることに注意してください

回答:

回答№1の22

この回答 あなたと同じ状況を説明しています。 (これを参照します 別のウェブサイトで回答する)。

ビジュアルツリーを更新する際の再入の問題を回避するために、ディスパッチャーの処理は中断されます。

「Row Loaded」イベントに応答してメッセージボックスを本当に表示する必要がある場合は、 `Dispatcher.BeginInvoke()を使用して呼び出しを延期する必要があります。

だから、置き換えます:

MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture));

with:

var msg = ((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture);
Dispatcher.BeginInvoke(new Action(() => MessageBox.Show(msg)));

このコードがWPFオブジェクトにある場合、 Dispatcher プロパティが利用可能です。それ以外の場合は、他の場所から取得する必要があります。