【问题标题】:Multiple threads to load different grids attached to different set of collections retrieved from database多个线程加载附加到从数据库检索的不同集合的不同网格
【发布时间】:2011-11-28 20:44:03
【问题描述】:

我有一个使用 MVVM 设计模式创建的 wpf 应用程序。在给定的视图中,有 5 个网格都绑定到不同的集合集,即 5 个集合对应 5 个网格。现在我不想在从数据库中检索 5 组数据时挂断 UI。

如果以下解决方案是一个好主意,请告诉我,否则请提出建议:

  1. 5 个可观察的集合,用于绑定到网格
  2. 5 个代表调用BeginInvoke 进行数据库操作,每个代表在EndInvoke 上都有IEnumerable Collection<Type>
  3. 委托 oncomplete 回调将从 IEnumerable collection<Type> 填充 ObservableCollection<Type>,以允许调度程序从 UI 线程更新 UI,因为 begininvoke 将在线程池线程上工作。

【问题讨论】:

  • 准备好将这些更新分块。如果你用大量更新来冲击 UI,那么如果你使用多线程并不重要。
  • @Will :是的,因为只有一个 UI 线程使消息管道出队:)
  • @sll:也许在 WinRT 更新的几次迭代之后,我们将获得不止一个 friggen UI 线程。该死的,COM!
  • 有意思,这个案例中COM是如何参与的?真的没有这么深的见识

标签: .net wpf mvvm delegates dispatcher


【解决方案1】:

您应该使用BackgroundWorker 组件来简化将工作转移到后台线程然后同步回UI 的过程。否则,您的一般方法听起来很简单。

【讨论】:

  • 它(通过多个线程更新 UI)是否有意义,因为根本只有一个 UI 线程?
  • Dispatcher.BeginInvoke 是否会用于执行长时间运行的数据库调用,以免 UI 线程卡住?
  • 更准确地说,对 Dispatcher.BeginInvoke 的 5 次调用会从线程池中产生 5 个线程吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2012-08-12
  • 2017-06-20
  • 1970-01-01
相关资源
最近更新 更多