【发布时间】:2010-10-10 19:19:16
【问题描述】:
我目前正在设计/修改应用程序的数据绑定部分,该应用程序大量使用来自后台线程的 winforms 数据绑定和更新(每秒一次,超过 100 条记录)。
假设该应用程序是一个股票交易应用程序,其中一个后台线程监视数据更改并将它们放入数据对象中。这些对象存储在BindingList<> 中并实现INotifyPropertyChanged 以通过数据绑定将更改传播到winforms 控件。
此外,数据对象当前正在通过WinformsSynchronizationContext.Send 将更改编组到 UI 线程。
用户可以在 UI 中输入一些值,这意味着可以从双方更改一些值。并且用户值不应被更新覆盖。
所以我想到了几个问题:
- 是否有一个通用的设计准则如何做到这一点(数据绑定中的背景更新)?
- 何时以及如何在 UI 线程上编组?
- 后台线程交互的最佳方式是什么 绑定/数据对象?
- 应该使用哪些类/接口? (BindingSource,...)
- ...
UI 并不真正知道有一个后台线程来更新控件,并且根据我在数据绑定场景中的理解,UI 不应该知道数据来自哪里......你可以想到后台线程作为将数据推送到 UI 的东西,所以我不确定 backgroundworker 是否是我正在搜索的选项。
有时您希望在数据/业务对象中的操作期间获得一些 UI 响应(例如,在重新计算期间设置背景)。在绑定到背景的状态属性上提高 propertychanged 是不够的,因为在计算完成后控件会重新绘制?我的想法是挂钩 propertychanged 事件并在控件上调用 .update() ... 对此有何其他想法?
【问题讨论】:
标签: winforms multithreading data-binding