我有一个wpf应用程序,它通过将可观察集合绑定到网格的常用方法填充Infragistics XamDataGrid。当每个数据项一次填充到集合中时,网格会更新。我还有一个取消按钮,如果用户点击它,我想立即停止播放。但是,响应取消需要几秒钟或更长时间。
问题(我认为)是消息循环充满了网格填充事件,我的取消在后面,必须等待轮到它。我想知道是否有办法在队列前面插入一条消息,从而使取消更具响应性(hacky与否 - 如果hacky,请解释我可以预期的不良影响)。
我没有遇到糟糕的表现;事实上,用户界面非常敏感。问题纯粹是取消事件必须在消息队列中轮流等待,我宁愿它优先于人口消息。
编辑:澄清
答案 0 :(得分:1)
当你说网格时,你的意思是什么样的网格?我认为您的问题可能是对于大型集合,此设置可能不会使用任何类型的项目虚拟化。在这种情况下,最好使用ListBox或ListView,它可以使用VirtualizingStackPanel仅为屏幕上的项目生成UIElements。
如果是这种情况,你的ui线程就会陷入困境,因为它为每个新项目生成元素,无论它是否显示在屏幕上。如果您使用的是第三方网格,则可以检查它是否具有内置的可以打开的虚拟化功能。
答案 1 :(得分:1)
答案最终成为DispatcherPriority:
private void btnCancel_Click(object sender, System.Windows.RoutedEventArgs e)
{
Dispatcher.Invoke(new Action(() => btnCancel.Command.Execute(null)), DispatcherPriority.Send);
}
“发送”优先级是枚举类型中最高的,“SystemIdle”最低。当我使用该优先级调用按钮的命令时,取消会立即通过。