WPF 的Image 控件 设置 Image.Source 的数据源,可能存在跨线程调用的问题。

news/2024/11/17 11:52:55/文章来源:https://www.cnblogs.com/wuty/p/18437244

相信很多WPF 的开发,应该都很多用到 Image 这个控件来显示图片。这个图片的来源可以来自各种各样的方式获取到。

我们的组内白板、批注的扫码的功能也用到这个去生成二维码,生成后,二维码显示不出来,由于触发到了全局捕获,界面又没有崩溃,遇到了好几个坑,记录一下。

开始看代码:

    private async void MainWindow_Loaded(object sender, RoutedEventArgs e){ImageSource imageSource = null;//用来模拟时间回调后,去获取图片资源Task.Run(() =>{imageSource = BitmapImageToBitmap();});await Task.Delay(2000);MyImage.Source = imageSource;}public static BitmapImage BitmapImageToBitmap(){BitmapImage bitmapImage = new BitmapImage(new Uri(@"C:\Users\a\Desktop\祁厅长壁纸.png", UriKind.RelativeOrAbsolute));return bitmapImage;}

我们在工作线程上去获取ImageSource (模拟事件回调),然后在Loaded 事件中给 Image控件的Source 赋值。

 

其实细看一下ImageSource 的定义,是继承了 Animatable,而Animatable继承了Freezable,Animatable继承了Freezable,Freezable继承了DependencyObject

  这也就是说,ImageSource  的创建和使用必须是用一个线程下的,不然就会存在以上的异常报错

Freezable.Freeze Method (System.Windows) | Microsoft Learn

解决方法:

BitmapImage 在获取图片的时候,提供了Freenze()的方法
public static BitmapImage BitmapImageToBitmap()
{BitmapImage bitmapImage = new BitmapImage(new Uri(@"C:\Users\a\Desktop\祁厅长壁纸.png", UriKind.RelativeOrAbsolute));if (bitmapImage.CanFreeze){bitmapImage.Freeze();}return bitmapImage;
}

加上就可以正常显示了,效果如下:

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-访问控制技术原理与应用

7.1 访问控制概述 1)概念 访问控制是指对资源对象的访问者授权、控制的方法及运行机制。 访问者又称为主体,可以是用户、进程、应用程序等; 资源对象又称为客体,即被访问的对象,可以是文件、应用服务、数据等; 授权是访问者可以对资源对象进行访问的方式,如文件的读、写、…

【赵渝强老师】基于大数据组件的平台架构

在了解了大数据各个生态圈所包含的组件及其功能特性后,就可以利用这些组件来搭建一个大数据平台从而实现数据的存储和数据的计算。下图展示了大数据平台的整体架构。视频讲解如下:大数据平台的Lambda架构大数据平台的Kappa架构大数据平台的总体架构可以分为五层,分别是:数据…

ctfshow-web-信息搜集(11-17)

web11 题目提示:域名其实也可以隐藏信息,比如ctfshow.com就隐藏了一条信息。 原理:通过Dns检查查询Flag。这里可以用阿里云的网站: Dns查询网站:阿里云网站运维检测平台 (aliyun.com)web12 题目提示:有时候网站上的公开信息,就是管理员常用密码 原理:查看robots.txt文件…

设备管理平台-支持快速开发

技术路线(同时支持前后端分离 / 前后端一体,可用于网关或者服务器部署) 前端:layui-v2.9.17 后端:Net8.0 使用组件 Swagger、Jwt、Freesql、MiniExcel、MemoryCache(存储登录用户信息,代替HttpContext.Session,也可使用Redis)系统架构 非市面上繁杂的架构(Model、Ser…

几款文本编辑器横向比较

文本编辑器 大文件编辑器 程序员编辑器几款文本编辑器横向比较 关键字: 大文件、编辑器 ‍ 编辑器功能及性能比较免责声明以下列选编辑器,仅限于本人日常接触的产品,带有强烈的个人主观和随机性,未列选产品并不代表不能满足功能需求。 测试数据(特别是时间),受限于观察条…

设备云平台

技术路线(同时支持前后端分离 / 前后端一体,可用于网关或者服务器部署) 前端:layui-v2.9.17 后端:Net8.0 使用组件 Swagger、Jwt、Freesql、MiniExcel、MemoryCache(存储登录用户信息,代替HttpContext.Session,也可使用Redis)系统架构 非市面上繁杂的架构(Model、Ser…

系统集成项目管理工程师笔记1 - 第一章 信息化发展

基础知识 第一章 信息化发展 1.1 信息与信息化 1.1.1 信息基础信息物质、能量以及其属性的标示的集合,是确定性的增加。以物质介质为载体,传递和反映世界各种事物存在方式、运动状态等的表征。信息不是物质,也不是能力。以一种普遍形式,表达物质运动规律,在客观世界中大量…

基于CTFshow的文件上传二次渲染绕过与CTF实战

1. 二次渲染简介 二次渲染指的是上传的文件(如图片),为了显示的更加规范(尺寸、像素),网站会对文件进行二次处理,经过解码或转换可能导致其中的恶意代码失效。例如,后门程序在图像渲染过程中可能被清除或无法执行。 2. 二次渲染存在性判断 2.1 文件大小变化 访问上传的…

一万次悲伤 吉他谱

本文来自博客园,作者:ukyo--夜王,转载请注明原文链接:https://www.cnblogs.com/ukzq/p/18437154

抖音快手OBS虚拟摄像头直播被误判录播如何修改注册表

使用OBS虚拟摄像头容易被检测为录播解决办法参考增加视频内容的动态性:在OBS中使用多个视频源,如实时摄像头画面、屏幕共享、图像幻灯片等,并且定期切换这些源,以模拟真实直播时的操作。使用摄像头捕捉真实画面:将真实摄像头捕捉到的画面作为OBS的一个场景,这样可以提供实…

E60 树形DP+贪心 P3574 [POI2014] FAR-FarmCraft

视频链接: P3574 [POI2014] FAR-FarmCraft - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// 树形DP+贪心 O(nlogn) #include <iostream> #include <cstring> #include <algorithm> using namespace std;const int N=500005; int head[N],to[N<<1]…