【问题标题】:Updating an ObservableCollection without hanging the UI在不挂起 UI 的情况下更新 ObservableCollection
【发布时间】:2010-11-02 03:04:15
【问题描述】:

是否可以在不挂到 U.I. 的情况下更新大型 ObservableCollection(即添加项目)?

我想知道是否是因为我有一个相对较大的循环(500 次迭代),其中每次迭代都会向集合中添加一个项目。

或者,是否正在刷新集合并通知 UI 更改。

或者...两者都有!

我确实遇到了这个线程,但这可能是一个完全不同的关于 Dispatcher 的问题(为什么使用 Dispatcher 会有所帮助?): Using BackgroundWorker to update the UI without freezes...?

【问题讨论】:

    标签: silverlight observablecollection ui-thread


    【解决方案1】:

    检查这个previous SO answer

    ObservableCollection 不允许您禁用和重新启用为更改而触发的事件,但您似乎可以使用 BindingList

    【讨论】:

    • 酷。我希望 SL 有绑定列表。如果可以的话,我一定会走这条路。但是,现在,我想知道通过 Dispatcher 更新异步完成事件的集合是否有助于缓解 UI 的“冻结”。任何人都可以确认或否认这一点吗?
    • 使用调度程序无济于事。所做的只是为您编组跨线程访问。 (例如,如果您想从不同的线程更新某些 UI,则使用 Dispatcher 调用 UI 命令。)您的集合仍将在每次修改集合时引发事件,并且任何侦听器都会收到通知。由于他们使用多播委托订阅事件,他们的通知进入新线程,因此它们不会被您的可观察集合更新阻塞或阻塞。您能否对 IEnumerable 进行更新,然后再进行 ObservableCollection?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多