相关疑难解决方法(0)

如何从其他线程更新GUI?

Label从另一个线程更新a的最简单方法是什么?

我有一Formthread1,并从我开始另一个线程(thread2).虽然thread2在处理一些文件,我想更新LabelForm用的当前状态thread2的工作.

我怎样才能做到这一点?

.net c# user-interface multithreading winforms

1331
推荐指数
41
解决办法
63万
查看次数

WinForms多线程数据绑定场景,最佳实践?

我正在设计/重新编写应用程序的数据绑定部分,该应用程序大量使用来自后台线程的winforms数据绑定和更新(每秒一次> 100条记录).

让我们假设应用程序是一个股票交易应用程序,后台线程监视数据更改并将它们放到数据对象上.这些对象存储在一个BindingList<>并实现,INotifyPropertyChanged以通过数据绑定将更改传播到winforms控件.此外,数据对象当前正在通过WinformsSynchronizationContext.SendUI线程编组更改.用户可以在UI中输入一些值,这意味着可以从两侧更改某些值.并且更新不应该超出用户值.

所以我想到了几个问题:

  • 是否有一般设计 - 指导如何做到这一点(数据绑定中的背景更新)?
  • 何时以及如何在UI线程上编组?
  • 后台线程与绑定/数据对象交互的最佳方式是什么?
  • 应该使用哪些类/接口?(BindingSource,...)
  • ...

用户界面实际上并不知道有一个后台线程,它会更新控件,而且根据我在数据绑定场景中的理解,用户界面不应该知道数据的来源......您可以将后台线程视为将数据推送到UI的东西,所以我不确定背景工作者是否是我正在搜索的选项.

有时您希望在数据/业务对象的操作期间获得一些UI响应(例如,在重新计算期间设置背景).在绑定到后台的状态属性上提升属性是不够的,因为控制在计算完成后重新绘制了?我的想法是挂钩propertychanged事件并在控件上调用.update()......还有其他想法吗?

data-binding multithreading winforms

10
推荐指数
1
解决办法
4721
查看次数