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です
この回答 はあなたと同じ状況を説明しています。 (これは 別のWebサイトでの回答 を参照しています)。
ビジュアルツリーの更新時に再入可能性の問題を回避するために、ディスパッチャーの処理が中断されます。
「Row Loaded」イベントに応答してメッセージボックスを表示する必要がある場合は、 `Dispatcher.BeginInvoke()を使用して呼び出しを延期する必要があります。
だから、交換してください:
MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture));
と:
var msg = ((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture);
Dispatcher.BeginInvoke(new Action(() => MessageBox.Show(msg)));
このコードがWPFオブジェクト内にある場合、Dispatcher
プロパティを使用できます。それ以外の場合は、別の場所から取得する必要があります。