调度程序处理已被暂停

调度程序处理已被暂停

本文介绍了WPF:调度程序处理已被暂停,但消息仍在处理中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个WPF项目,当我尝试在RowLoad事件上运行此代码时,我得到了下面的错误:

  private void ParentGridView_OnRowLoaded(object sender,EventArgs e)
{
尝试
{
if(((RadGridView)sender).Columns!= null)
{
MessageBox.Show(((RadGridView)发送方).Columns.Count.ToString(CultureInfo.InvariantCulture));
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);


错误:调度程序处理已暂停,但消息仍然在处理中。

请注意,GridView控件是Telerik RadGridView

解决方案

)。



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



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


I Have a WPF Project, When i try to Run This Code On RowLoad Event I got below Error :

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);
    }
}

Error : Dispatcher processing has been suspended, but messages are still being processed.

Note That the GridView Control is Telerik RadGridView

解决方案

This answer describes the same situation as yours. (It references this answer on a different website).

The dispatcher processing is suspended to avoid reentrancy problems when updating the visual tree.

If you really need to display a message box in response to your "Row Loaded" event, you need to defer the call using `Dispatcher.BeginInvoke().

So, replace:

MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture));

with:

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

If this code is in a WPF object, then the Dispatcher property is available. Otherwise, you need to get it from somewhere else.

这篇关于WPF:调度程序处理已被暂停,但消息仍在处理中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 18:00