我有一个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);
}
}
错误:Dispatcher处理已暂停,但仍在处理消息。
请注意,GridView控件是Telerik RadGridView
答案 0 :(得分:23)
This answer描述了与您相同的情况。 (它引用了这个answer on a different website)。
暂停调度程序处理以避免在更新可视树时出现重入问题。
如果您确实需要显示一个消息框以响应“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
属性可用。否则,您需要从其他地方获取它。