私は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
プロパティが利用可能です。それ以外の場合は、他の場所から取得する必要があります。