use*_*068 2 c# wpf multithreading dispatcher
我希望能够以快速的速度向数据网格添加项目,而不会导致UI延迟.
这是我现在正在做的事情:我正在使用绑定到数据网格的ObservableCollection.
我使用后台线程,只有在从observable集合中插入/删除时,才会循环并调用当前调度程序上的Invoke.调用BeginInvoke会产生不良结果.
我知道在调度员上调用那么多导致延迟,但我不知道还能做什么.我之前使用过背景工作者,但我认为这不适用于我的场景.
我该怎么做才能保持用户界面的响应速度?
批量更新 - 后台线程可以将项添加到队列中,您可以通过调用定期刷新绑定的可观察集合.如果需要处理多线程生成器,请查看System.Collections.Concurrent命名空间
您的设计的一个主要缺点是,通过绑定到ObservableCollection,您将导致UI呈现每个被添加到列表中的项目(可能是数千个) - 即使在处理结束时只需要10个项目渲染.
这样的UI永远只需要处理10个项目 - 我改变的ObservableCollection到列表,并在处理结束手动刷新DataGrid中看到了巨大的改进.我发现这种变化导致50%的性能提升,并且在处理List时允许UI 100%响应.
如果您要处理列表很长时间,并且需要显示实时更改,则可以每100个项目刷新一次DataGrid.这将显示约0.5秒精度的结果,该精度应足够接近.
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |