栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何通过辅助线程更新ObservableCollection?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何通过辅助线程更新ObservableCollection?

从技术上讲,问题不是您正在从后台线程更新ObservableCollection。问题在于,这样做时,集合将在引起更改的同一线程上引发其CollectionChanged事件-
这意味着控件正在从后台线程更新。

为了在控件绑定到背景线程时从后台线程中填充一个集合,您可能必须从头开始创建自己的集合类型以解决此问题。不过,有一个更简单的选项可能会为您解决。

将Add调用发布到UI线程上。

public static void AddOnUI<T>(this ICollection<T> collection, T item) {    Action<T> addMethod = collection.Add;    Application.Current.Dispatcher.BeginInvoke( addMethod, item );}...b_subcollection.AddonUI(new B());

此方法将立即返回(在将项目实际添加到集合之前),然后在UI线程上,将项目添加到集合,每个人都应该高兴。

但是,现实情况是,由于所有跨线程活动,该解决方案很可能在高负载下陷入困境。一种更有效的解决方案是批量处理一堆项目,并将它们定期发布到UI线程中,这样您就不会在每个项目的线程间进行调用。

该BackgroundWorker的类实现的模式,使您可以通过汇报其进展ReportProgress后台操作过程中的方法。通过ProgressChanged事件在UI线程上报告进度。这可能是您的另一选择。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号