【发布时间】:2014-12-27 17:43:15
【问题描述】:
在一个 winform 应用程序中,我有以下场景:
- socket 接收数据的频率很高(150-200packets x 秒)
- 我在收到的解码数据包上填充了一个网格视图
- 收到的商品可以是新商品,也可以是之前商品的更新。有 5 个可能的值可以更新
- gridview 处于虚拟化模式:开启
由于我无法绑定到 BindingList(它会冻结 Ui 线程),我决定使用队列并基于计时器更新网格视图。当处理计时器的经过事件时,我更新调用 gridview.TemplateMaster.Refresh() 导致 cellValueNeeded 被调用
这是我找到的最快的解决方案,但我有一些问题:
- 不知道哪一栏更新了
- 使用虚拟化导致我每次都调用 cellValueNeeded 而我的 List 几乎没用,我可以将它用作二维数组
- 我必须自定义实现排序/过滤/列重新排序
你们中有人有更好的方法吗? 谢谢
【问题讨论】:
-
你真的尝试过使用BindingList吗?控件的
ListChanged事件对单个单元格值的更改作出反应,不应重新绑定整个列表。我希望它能够针对您的情况进行优化,因此速度非常快。快速浏览这里:telerik.com/help/winforms/… 我的意思是,这就是我们为这样的高级控件付费的原因……如果 Telerik 的网格在这种级别的数据上阻塞,我建议四处寻找不同的网格控件。 -
是的,使用绑定列表很痛苦... UI 线程卡住了。 ..
-
您能在哪里分享您的代码的某些部分吗?我怀疑您可能使网格控制工作比它必须的更难。
标签: c# winforms gridview telerik