WPF: 调度程序处理已暂停,但仍在处理消息。

25

我有一个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个回答

37

这个答案描述了和你相同的情况。(它引用了不同网站上的另一个答案)。

当更新可视树时,为避免重入问题,调度程序会被暂停。

如果你真的需要在“行已加载”事件中显示消息框,则需要使用`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属性。否则,您需要从其他地方获取它。


谢谢!当我在WPF中从一个窗口拖动一个文本框控件到另一个窗口时,遇到了这个异常。 - Hieu.Gi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接