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

Posted

技术标签:

【中文标题】WPF:调度程序处理已暂停,但仍在处理消息【英文标题】:WPF : Dispatcher processing has been suspended, but messages are still being processed 【发布时间】: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

【问题讨论】:

【参考方案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”文本框控件从窗口到另一个窗口时,我遇到了这个异常。

以上是关于WPF:调度程序处理已暂停,但仍在处理消息的主要内容,如果未能解决你的问题,请参考以下文章

多个 TestFlight 构建停留在“处理”上,包括已处理的

WPF怎么跨线程访问UI控件

在剑道调度程序中处理销毁事件

在 WPF 的子线程中捕获未处理的异常

操作系统之进程调度

在angularjs中处理来自代理的HTTP 302响应