WPF:Dispatcher处理已暂停,但仍在处理消息

时间:2014-05-04 05:11:30

标签: 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);
    }
}

错误:Dispatcher处理已暂停,但仍在处理消息。

请注意,GridView控件是Telerik RadGridView

1 个答案:

答案 0 :(得分:23)

This answer描述了与您相同的情况。 (它引用了这个answer on a different website)。

暂停调度程序处理以避免在更新可视树时出现重入问题。

如果您确实需要显示一个消息框以响应“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属性可用。否则,您需要从其他地方获取它。