【问题标题】:Using an ObservableCollection<T> with Background Threads使用带有后台线程的 ObservableCollection<T>
【发布时间】:2008-10-13 20:55:31
【问题描述】:

微软似乎对 ObservableCollection 提出了一个绝妙的主意。它们非常适合绑定,并且在 UI 上速度非常快。

但是,每次您想要调整它时都需要将上下文切换到 Dispatcher Thread,这似乎有点过分。有谁知道使用它们的最佳实践?是不是简单的在业务层填充一个ICollection作为消息对象,然后在UI层创建ObservableCollection?然后如何处理 UI 上的集合更新?

【问题讨论】:

    标签: .net design-patterns observablecollection


    【解决方案1】:

    更新 UI 线程上的 ObservableCollection 是否真的会为您的应用程序造成这么大的瓶颈?如果没有,请坚持在 UI 线程上更新它。请记住,当您使用 Dispatcher 运行某些内容时,这并不是真正发生的上下文切换 - 相反,您只是将作业提交给 UI 线程,这是一个已经在运行的线程,操作系统将在某个时候切换到该线程. UI 线程将您提交的作业从内部队列中拉出并执行。您不会自己强制上下文切换。

    【讨论】:

    • 除非是同步操作,否则不是上下文切换
    • 当操作系统从一个线程移动到另一个线程时,它总是一个上下文切换,你是什么意思“除非它是一个同步操作”?
    【解决方案2】:

    您也可以在 WPF 中使用旧的 BackgroundWorker(如在 Windows 窗体中)。它将采用 WPF 的线程模型,并提供一个很好的抽象。

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 2014-05-02
      • 2022-01-06
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多