写点什么

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

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

关注

评论

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

光伏策略控制服务器是什么?核心功能与系统定位详解

西格电力

分布式光伏并网 分布式光伏发电 分布式光伏 分布式光伏产品 光伏策略控制服务器

人工智能时代,如何打造网络安全“新范式”

光联世纪

SD-WAN

关于EDK II固件漏洞修复及版本回退的安全通告

qife122

系统安全 UEFI固件

AI 智能体 - 学习与适应能力

Hernon AI

AI智能体 AI开发框架 AI开发方法论 AI设计模式

小型 DAO 去中心化组织工具开发最低预算需要多少?

西安链酷科技

海外网红营销服务公司评估指南:5大维度筛选优质合作伙伴

Wolink

出海 海外社媒营销 海外营销推广 海外红人营销 品牌推广

案例宝公众号管理系统:全行业客户案例管理神器,高效转化成交好帮手

微擎应用市场

品牌出海组织变革:构建支持全球化业务的敏捷团队架构

Wolink

跨境电商 出海企业 品牌出海 海外红人营销 品牌推广

「开发者扶持计划」正式上线,MemOS 云平台全面免费!

记忆张量MemTensor

MemOS 记忆管理 记忆张量

通往可信数据智能的路线图,就在这本《NoETL to Trusted AI》白皮书

Aloudata

数据分析 AIAgent noetl ChatBI 智能问数

AI 智能体 - 模型上下文协议

Hernon AI

AI智能体 MCP协议 A2A AI开发框架

创新服务模式探索:海外网红营销服务公司的转型升级趋势

Wolink

跨境电商 电商营销 海外社媒营销 海外营销推广 海外红人营销

品牌出海战略解码:从中国品牌到全球品牌的进化路径

Wolink

跨境电商 品牌营销 出海企业 品牌出海 品牌推广

当销售额下降时,ChatBI 如何实现多维下钻、归因分析?

Aloudata

数据分析 归因分析 ChatBI 智能问数 dataagent

蚂蚁数科跻身中国AI智能体开发平台“领导者”阵营

Lily

RelativeLayout 根布局里有一个子布局预期一直展示,但子布局RelativeLayout被 覆盖了

lichong951

android Android Studio

鸿蒙手机打开开发者模式

lichong951

HarmonyOS HarmonyOS NEXT

人大 DeepAnalyze 免费体验通道开启!上传数据,坐等报告!

ModelWhale

人工智能 数据分析 大模型 DeepAnalyze

如何和AI协作提高工作效率

Hernon AI

AI 智能体 AI开发框架 AI开发方法论 AI设计模式 AI协作

星畅家政小程序系统:一站式家政服务数字化解决方案

微擎应用市场

数据交换机案例详解|基于smardaten实现智慧园区数据处理与分析

数睿数据

智慧园区 smardaten 数睿数据

AI智能体 - 目标设定与监控模式

Hernon AI

AI开发 AI智能体 AI开发框架 AI设计模式

观测云荣膺亚马逊云科技 2025 年合作伙伴奖项

观测云

可观测性

CAD图纸闪退、打不开?快来试试CAD图纸清理?

在路上

cad cad看图 CAD看图王

总奖金超40万!高德空间智能开发者大赛开启报名和作品提交通道

高德开放平台

低代码助力企业协同办公:不止降本增效,更是增长新引擎!

天津汇柏科技有限公司

如何运用 Scrum 打造一个高绩效的团队

ShineScrum

Scrum 高绩效团队

harmonyos 大屏设备怎么弹出 u 盘

lichong951

《独立开发者精选工具》第 023 期

Immerse

Agent如何重塑跨角色协作的AI提效新范式

Comate编码助手

AI 编程 文心快码 编程智能体

16k数据撬动300亿大模型!我用Qwen3-VL打造了一位“顶尖放射科医生”

LLaMAFactoryOnline

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