web-dev-qa-db-ja.com

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

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です

19
Amin Eshtiaghi

この回答 はあなたと同じ状況を説明しています。 (これは 別の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プロパティを使用できます。それ以外の場合は、別の場所から取得する必要があります。

28
Dave Tillman