【wpf】ObservableCollection 跨线程报错问题

news2024/11/19 5:38:43

背景

ObservableCollection 我们之前介绍过他和List的区别。ObservableCollection 的好处在于,当集合发生变化时,能发送通知通知界面发生相应的更改。但是ObservableCollection 有个弊端。无法在非UI线程中访问。
要么就是通知失效了,要么就是直接报错了。
在这里插入图片描述

解决方法1

既然只能时UI线程访问,那就交给UI线程访问就好了:

Application.Current.Dispatcher.Invoke(() =>
{
    ImageFiles.Add(pictruePath);
});

通过添加Dispatcher这种方式,让其调用转交给UI线程。
但是这样写,我觉得太蛮烦了,而且很多地方加上这样一句不是很美观。

解决方案2

使用,ObservableConcurrentQueue 替换 ObservableCollection 。
他是一个第三方的包,他是线程安全的,基于经典并发队列 (System.Collections.Concurrent.ConcurrentQueue) 的 Observable 并发队列 允许在队列内容更改时引发事件,其事件与 ObservableCollection 相同。
在这里插入图片描述
有了他之后,就不需要Dispatcher这段代码了。
不过ObservableConcurrentQueue 并没有Add方法,取而代之的是Enqueue(入列)这个方法!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1610238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

血的教训之虚拟机重装[包含一系列虚拟机,c++,python,miniob配置]

一切都要从头开始,由于脑袋糊涂,没看到是虚拟机的文件,直接一口气全删掉了,哎!!数据恢复后发现也不行,磁盘文件还是缺失了一部分,只能重新再来了。 等待ing 看不到按钮,按…

CSS基础:盒子模型详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃,大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 We…

SQLite的PRAGMA 声明(二十三)

返回:SQLite—系列文章目录 上一篇:SQLite从出生到现在(发布历史记录)(二十二) 下一篇:用于 SQLite 的异步 I/O 模块(二十四) PRAGMA 语句是特定于 SQLite 的 SQL 扩…

功能测试前景揭秘:会被淘汰吗?

在当今快速发展的信息时代,软件已经成为我们工作、学习乃至生活中不可或缺的一部分。随着技术的不断进步和应用的广泛普及,软件测试作为保障软件质量和功能实现的关键步骤,其职业发展路径也受到了广泛的关注。特别是针对功能测试这一细分领域…

踏上R语言之旅:解锁数据世界的神秘密码(二)

R语言学习 文章目录 R语言学习1.数据的R语言表示2.多元数据的R语言调用3.多元数据的简单R语言分析 总结 1.数据的R语言表示 数据框(data frame) R语言中用函数data.frame()生成数据框,其句法是: data.frame(data1,data2,…),例如…

记录一个hive中因没启yarn导致的spark引擎跑insert语句的报错

【背景说明】 刚在hive中配置了Spark引擎,在进行Hive on Spark测试时报错, 报错截图如下: [atguiguhadoop102 conf]$ hive which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/mod…

【Linux】服务器时区 [ CST | UTC | GMT | RTC ]

目录 1. 硬件时间(Real_TIME Clock [RTC time]) 1.1 硬件时间简介 1.2 如何使用硬件时间 2. 系统时间(UTC时间)(Universal time) 2.1 系统时间简介 2.2 UTC时间 3. 本地时间(Local time&…

webpack源码分析——enhanced-resolve库之getType、normalize、join和cachedJoin函数

一、PathType 路径类型 const PathType Object.freeze({Empty: 0, // 空Normal: 1, // 默认值Relative: 2, // 相对路径AbsoluteWin: 3, // win 下的绝对路径AbsolutePosix: 4, // posix 下的绝对路径Internal: 5 // enhanced-resolve 内部自定义的一种类型,具体是…

颠覆传统消费,走向可持续:每次购物都是循环的开始

亲爱的读者朋友们,大家好,我是微三云周丽。今天,我非常激动地想要向大家分享一种极具创新性和前瞻性的商业模式——循环购。这种模式将消费返利与积分返利理念相融合,为商家与消费者之间搭建了一座互动与共赢的桥梁,让…

安全开发实战(1)--Cdn

目录 安全开发专栏 CDN介绍 1.信息收集阶段 1.1判断CDN是否存在 1.1.1, One 1.1.2,Two(改进) 1.1.3,进行整合 增加输入功能 1.1.4 批量读取监测存储(进行测试) 问题1: 问题2: 解决方案: 1.1.4 基本编写完成 命令框中: cdn存在.txt 总结 这里我是根据整个渗透测…

【spring】springProperty 使用

springProperty 是一个在 Spring 框架中使用的SpEL(Spring Expression Language)表达式,它允许你在应用程序的配置中引用 Spring 应用程序上下文中的属性值。这个表达式通常用于从 Spring 的 Environment 对象中获取配置属性的值,…

【Java探索之旅】用面向对象的思维构建程序世界

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、初识面向对象1.1 什么是面向对象?1.2 面向对象与面向过程 二、类的定义…

HDLbits 刷题 -- Adder100

Create a 100-bit binary adder. The adder adds two 100-bit numbers and a carry-in to produce a 100-bit sum and carry out. 译: 创建一个100位二进制加法器。加法器将两个100位的数字和一个进位相加,产生一个100位的和并执行。 个人解法&#xf…

短视频素材哪里去找?推荐几个视频素材免费下载的网站

高质量的资源,会让你的视频创作更加生动和具有吸引力。下面我为你介绍世界各地的优质无水印视频素材网站,以拓宽你的创作视野,帮助你在这个视觉革命的时代中脱颖而出。 1. 蛙学府(中国) 提供各种类别的优质高清视频素…

【Linux C | 多线程编程】互斥量、信号量、条件变量对比总结

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 本文未经允许…

【UKE!】2024.4.19

2024.4.19 【你知道的都是真相。只可惜那些并不是真相的全部。】 Friday 三月十一 谷雨 <BGM “谷雨–音阙诗听”> AC :Answer Coarse,粗劣的答案 ​ CE :Compile Easily,轻松通过 ​ PC :Perfect Compile 完美的编译 ​ WA :Wonderful Answer,好答案 ​ RE :Run Exce…

【Java开发指南 | 第十六篇】Java数组及Arrays类

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 数组数组特点创建数组处理数组多维数组Arrays类 数组 Java中的数组是一种用来存储固定大小的相同类型元素的数据结构。 数组特点 数组具有以下特点&#xff1a; 1、固定大小: 一旦数组被创建&#xff0c;其…

【云计算】云数据中心网络(五):对等连接

《云网络》系列&#xff0c;共包含以下文章&#xff1a; 云网络是未来的网络基础设施云网络产品体系概述云数据中心网络&#xff08;一&#xff09;&#xff1a;VPC云数据中心网络&#xff08;二&#xff09;&#xff1a;弹性公网 IP云数据中心网络&#xff08;三&#xff09;…

vue3 echarts 图表主题切换

我主要是用了localStorage和composable来实现的。 先创建composable文件夹存储composable的操作方法&#xff1b; 在App.vue文件里面&#xff0c;先将主题数据存储在localStorage里面&#xff1b; 主题切换 图表theme包更换 为什么要用composable呢&#xff1f; 单纯的使用…

CS61B sp21fall Project02 Gitlet

Project02 Gitlet 一、项目简介二、Git和Gitlet2.1 Git简介2.2 Gitlet简介 三、框架设计3.1 Blobs3.2 Trees3.3 Commits 四、.Gitlet文件结构设计4.1 .git文件架构4.1.1 重点介绍index&#xff08;VSCode中无法查看&#xff0c;会乱码&#xff09;objects&#xff08;VSCode中无…