Qwen3 惊喜上线阿里云百炼,8款模型全开源!点击免费领取 800万 tokens! 了解详情
写点什么

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

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

关注

评论

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

绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?

Baihai IDP

程序员 AI LLMs GenAI CAG

浅谈Tox之一

天翼云开发者社区

Python 自动化测试 Tox

秒验:重构APP用户体验与运营效率

MobTech袤博科技

消防行业如何借助时序数据库 TDengine 打造高效的数据监控与分析系统

TDengine

tdengine 时序数据库 数据库‘’

百度百舸 DeepSeek 企业套件上线,加速 DeepSeek 融入企业生产业务

Baidu AICLOUD

百度百舸

干货!RPA 化解电商对账复杂流程全解析

Techinsight

电商 电商节 AI Agent

国际专线宽带是什么?有什么优势?

Ogcloud

国际专线 国际网络专线 网络专线 国际专线宽带

智能制造:汽车从订单到交付全流程

积木链小链

数字化转型 制造业 智能制造

AI口语练习APP的对话练习

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI口语学习

Beyond Compare 5:文件对比与同步的终极工具

Rose

MacDroid Pro for mac(安卓手机数据传输助手)2.3激活版

Rose

开源创意点亮生态未来 第二届OpenHarmony创新应用挑战赛圆满收官

科技热闻

服装智能制造软件平台(源码+文档+讲解+演示)

深圳亥时科技

哈尔滨等保2.0丨5分钟速览:小白也能看懂的等保2.0介绍

黑龙江陆陆信息测评部

出海企业必看!国际网络开通全攻略

Ogcloud

国际专线 国际网络专线 海外网络访问 海外网络连接

加快培育新质生产力,天翼云息壤智算一体机引领国产AI新征程

科技热闻

观测云产品更新 | 可用性监测、场景图表、指标管理等优化

观测云

产品迭代

当我用DeepSeek写了这篇公众号,全是梗

kookeey代理严选

小红书 ChatGPT DeepSeek DeepSeek-R1、 跨进电商

Typora:极简主义者的Markdown写作神器

Rose

课程质量评估系统(源码+文档+讲解+演示)

深圳亥时科技

Capture One 23 Pro:专业摄影师的终极RAW编辑工具

Rose

法院信息化 4.0 版,RPA 如何革新司法流程?

Techinsight

法院 信息化建设 RPA Agent Agent智能体

秒验三网合一,打破运营商壁垒的用户增长加速器

MobTech袤博科技

AI口语练习APP的模拟考试

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI口语学习

浅谈Tox之二

天翼云开发者社区

Python 测试 Tox

taosd 写入与查询场景下压缩解压及加密解密的 CPU 占用分析

TDengine

数据库 tdengine 时序数据库

Red Giant for Mac2025(红巨人调色插件套装包含Trapcode、Magic Bullet、VFX)

Rose

「工业4.0」智慧化工厂解决方案,智慧化工园区总体规划设计方案

金陵老街

智慧园区 智慧化工园区

AI口语练习APP的发音评测

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语口语

存储降本,查询提速!时序数据库 TDengine 助力靖江特钢释放数据价值!

TDengine

数据库 tdengine 时序数据库

后勤采购管理系统(源码+文档+讲解+演示)

深圳亥时科技

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