NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

多线程与 WPF 4.5

  • 2012-01-30
  • 本文字数:754 字

    阅读完需:约 2 分钟

WPF 4.5 已经改进了其对于多线程数据绑定的支持,但所用技术却带有风险。本文将会介绍其工作原理以及如何才能确保安全使用。

WPF 数据绑定对于多线程的支持一直都没什么具体计划。当对象在非 UI 线程上发出了属性变化事件时,数据绑定基础设施就会对其作出响应。通常这是可行的,但因为潜在的竞态条件,这么做并不是真正安全的。从计算机科学的视角来看,禁用跨线程的访问是更为正确的做法,因为这才是导致集合变化事件的根源。

但遗憾的是,开发者并不总是在意正确性,他们只是想把事情做完。这样,他们会使用各种“线程安全”或是“分发安全”的可观测集合。在所有这些做法中,基本的设计就是在调用前将集合变化的事件编排到正确的线程中。在这种情况下,正确的线程就是分发者所运行的那个线程。但遗憾的是,这么做并未消除竞态条件的可能性。

在 WPF 4.5 中,微软向开发者提供了一种更为安全的解决方案。通过调用 BindingOperations.EnableCollectionSynchronization ,WPF 数据绑定引擎会使用锁。其默认行为是获得前述调用所指定对象上的锁,但你也可以使用更为复杂的锁模式。但遗憾的是,这种方式很容易出错;对于后台线程来说,你很容易忘记获得集合的锁。当集合不再需要时,你还可能忘记禁用集合同步,这会导致内存泄露。

该技术的另一个问题是它并不会保护单个对象。这样当在锁下读取集合时,集合中每一项的属性就不一定能够保证会被安全读取。这对于复杂的getters 以及无法以原子方式进行设置的属性来说极易产生问题(比如说大的值类型)。

我们强烈建议使用后台线程的开发者只使用集合中的不变对象来更新集合。如果对象无法保证是不变的,那么至少在确保属性getters 的线程安全上要格外小心。当向集合中添加对象时,你最好不要使用该特性,而是将集合更新编排到UI 线程中。

查看英文原文: Multithreading and WPF 4.5

2012-01-30 05:452679
用户头像

发布了 88 篇内容, 共 258.6 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

竞放数字力量,释放无限潜能!

天翼云开发者社区

云计算 大数据 IDC

编程太难学?你可能还没试过这个神器

代码生成器研究

芯片国产替代发展得怎么样了?

IC男奋斗史

华为 芯片 校园招聘 国产替代 中芯国际

Redis - AOF 日志

zurhan

华为云耀云服务器L实例助你轻松搭建个人网站

轶天下事

打造有效安全闭环,天翼云MDR来了!

天翼云开发者社区

云计算 网络安全

解锁 ElasticJob 云原生实践的难题

宋小生

性能调优五步法

天翼云开发者社区

Linux 性能优化

教育行业内卷,技术降本增效是否去内卷化效应?

Speedoooo

小程序生态 降本增效 小程序容器 小程序技术 教育内卷

华为云助力中小企业应对挑战:云耀L实例在跨境电商的应用探析

轶天下事

Programming Abstractions in C阅读笔记:p197-p201

codists

凯叔讲故事如何把好内容传递给千万儿童?

最新动态

Redis 慢操作

zurhan

卓越性能下的华为云耀云服务器L实例:小程序竞争中的利器

轶天下事

CORS跨域问题

zurhan

数字经济时代:城市到底如何演绎?产业将何去何从?

平平无奇爱好科技

轻松搭建,轻松上云——华为云耀云服务器L实例助力小程序开发

轶天下事

企业数字化浪潮来袭,华为云耀云服务器L实例打造中小企业

轶天下事

SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析

小万哥

MySQL 数据库 程序员 sql 后端开发

SocialFi 和 GameFi 的碰撞 — Socrates 构建新的 Web3 流量入口

股市老人

在校大学生如何用编程赚钱?

代码生成器研究

企业为什么需要进行敏捷开发培训?有哪些好处?

顿顿顿

敏捷开发 敏捷项目管理 scrum培训 敏捷培训

数据同步:主从如何实现数据一致性

zurhan

你的编程能力从什么时候开始突飞猛进?

代码生成器研究

学习 编程 编程语言 可视化

Java 对象的内存布局

zurhan

华为云耀云服务器L实例助力小程序开发的成本与效率之选

轶天下事

新形势下,2024年企业数字化转型该如何进行?

优秀

数字化转型 企业数字化转型

RWA+AI 叙事下的 ProsperEx,对 Web3 时代交易的重新定义

股市老人

聊聊如何进行代码混淆

京东商品详情 API 接口深度解析与应用

tbapi

京东技术 京东商品详情数据接口 京东API接口

编程太难学?你可能还没试过这个神器

代码生成器研究

编程

多线程与WPF 4.5_.NET_Jonathan Allen_InfoQ精选文章