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

Ami*_*ghi 19 wpf gridview messagebox telerik 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

请注意,GridView控件是Telerik RadGridView

Dav*_*man 28

这个答案描述了与你相同的情况.(它在不同的网站上引用了这个答案).

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

如果您确实需要显示一个消息框以响应"Row Loaded"事件,则需要使用`Dispatcher.BeginInvoke()延迟调用.

所以,替换:

MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)

有:

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

如果此代码位于WPF对象中,则该Dispatcher属性可用.否则,您需要从其他地方获取它.