QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

直播预告 | PolarDB-X 动手实践系列——PolarDB-X 的表组与分区变更

阿里云数据库开源

MySQL 数据库 阿里云 开源 PolarDB-X

“易+”开源 | 简单可信赖,GameSentry 正式开源

网易智企

开源 安全测试

学习ui设计自学好还是参加UI培训好?

小谷哥

Seata AT 模式代码级详解

SOFAStack

seata

合同抵万金,禅道项目管理服务包免费领!

禅道项目管理

项目管理 禅道

堡垒机全称是什么?是运维安全审计系统吗?

行云管家

网络安全 堡垒机

《2022 社交泛娱乐出海白皮书》发布,最全出海破局指南

融云 RongCloud

社交 白皮书 泛娱乐

clickhouse 索引、索引局限与解决方案

水滴

Clickhouse 索引 解决方案 稀疏索引

认识Java的整形数据结构

华为云开发者联盟

Java 开发 企业号九月金秋榜

一文读懂数字化转型中的数据存储

元年技术洞察

数据库 数据中台 数据治理

百分点大数据技术团队:Cesium技术在智慧应急行业的应用

百分点科技技术团队

RDS:一致性处理事务的神器

华为云开发者联盟

数据库 后端 企业号九月金秋榜

关于Linux中Keepalived高可用热备自动化部署的一些笔记

山河已无恙

9月月更 #九月金秋

后疫情时代,远程办公发展趋势如何?

Baklib

协同办公 文档管理

推动零信任加速落地应用 天翼云为企业铸牢安全基石

极客天地

哪家web前端培训班比较好?

小谷哥

以百分点大数据操作系统(BD-OS)为例 解读ToB产品架构设计的挑战及应对方案

百分点科技技术团队

基于RESTful页面数据交互案例

十八岁讨厌编程

RESTful 后端开发 9月月更

如何学习大数据分析?

小谷哥

Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量

PPPHUANG

Java 协程 吞吐量 虚拟线程

ESP32-C3入门教程 基础篇(五、RMT应用 — 控制SK6812全彩RGB 灯)

矜辰所致

ESP32-C3 9月月更 RMT

区块链商城系统开发NFT交易技术

薇電13242772558

区块链

语雀桌面端技术架构实践

阿里巴巴终端技术

桌面端

[SpringMVC]REST入门案例与优化

十八岁讨厌编程

spring 后端开发 9月月更

5种kafka消费端性能优化方法

华为云开发者联盟

大数据 企业号九月金秋榜

学习ui设计需要掌握哪些东西呢

小谷哥

百草味推出“潮卤江湖”系列新品 聚焦地域风味创新

E科讯

反诈骗要卷起来!隐私计算助攻反诈行动把握主动权

Jessica@数牍

数据安全 隐私计算 反欺诈

带你了解CANN的目标检测与识别一站式方案

华为云开发者联盟

人工智能 目标检测 CANN 企业号九月金秋榜 目标识别

LED显示屏行业大数据分析

Dylan

LED显示屏 led显示屏厂家

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