产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

多线程与 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:452755
用户头像

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

关注

评论

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

如何有效管理低绩效人员:CARES 框架

俞凡

团队管理

前端开源汉字书写笔画库

大师兄

JavaScript GitHub Vue

Aiseesoft Data Recovery for Mac(专业数据恢复软件)v1.8.22激活版

iMac小白

Video Cut Crop Join for Mac(mac视频剪辑合并软件 )v3.9激活版

iMac小白

Syncovery for mac(文件备份和同步工具)v10.14.9激活版

iMac小白

Proxyman Premium for Mac(网络调试和分析工具)v5.5.0激活版

iMac小白

Video Cut Crop Join for Mac(mac视频剪辑合并软件 ) v3.9版

Mac相关知识分享

Mac软件 mac软件下载 视频编辑软件 视频处理软件

批量图像水印添加实用程序Watermark Sense for Mac

Mac相关知识分享

图像处理 Mac软件 mac软件下载

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版

sysin

esxi 驱动 网卡 unlocker aqc

强大的任务管理工具Tower for Mac v11.1 注册激活版

iMac小白

Tower下载 Tower mac版 Tower破解 Tower for mac

拼多多API接口详解:自动化获取商品信息的高效指南

Noah

MATLAB R2023a for Mac(商业数学软件)v9.14.0 (2337262)激活版

iMac小白

PDF Reader Pro for mac(全能pdf编辑阅读软件)v4.0.2直装激活版

iMac小白

DBeaverUE for Mac(数据库管理软件) v24.1.0 版

Mac相关知识分享

数据库 Mac Mac软件 mac软件下载

Native Instruments Komplete Kontrol for mac(音源制作软件) v3.2.1版

Mac相关知识分享

MacBook Mac软件 mac软件下载 音乐制作软件

领导者在沟通中最容易犯的错误

俞凡

团队管理

Arweave的挑战与机遇:解读AO技术与未来生态

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

IBM SPSS Statistics for Mac(spss数据统计与分析软件)v27.0.1中文激活版

iMac小白

mac电脑数据恢复软件Aiseesoft Data Recovery for Mac v1.8.22激活版

iMac小白

Axure RP 9 for Mac(交互原型设计软件)v9.0.0.3744中文激活版

iMac小白

Deskew Technologies Gig Performer for mac(现场控制乐器和声音机架 ) v5.0.9版

Mac相关知识分享

MacBook Mac软件 音乐软件 音频处理软件 图形图像软件

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