【问题标题】:WPF : Dispatcher processing has been suspended, but messages are still being processedWPF:调度程序处理已暂停,但仍在处理消息
【发布时间】:2014-06-20 14:20:14
【问题描述】:

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

【问题讨论】:

    标签: wpf gridview telerik messagebox radgridview


    【解决方案1】:

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

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

    如果您确实需要显示一个消息框来响应“已加载行”事件,则需要使用 `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 中使用“DragDrop”文本框控件从窗口到另一个窗口时,我遇到了这个异常。
    猜你喜欢
    • 2018-03-26
    • 2016-05-12
    • 2012-01-13
    • 2011-12-23
    • 2015-10-21
    • 2011-12-18
    • 1970-01-01
    • 2012-03-25
    • 2021-12-05
    相关资源
    最近更新 更多