WPF 的Image 控件 设置 Image.Source 的数据源,可能存在跨线程调用的问题。
相信很多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;
}
加上就可以正常显示了,效果如下:
WPF 的Image 控件 设置 Image.Source 的数据源,可能存在跨线程调用的问题。的更多相关文章
- SplendidCRM中给来自EditView中的listbox控件设置选中值或数据源
DropDownList list = this.findContol("aas") as DropDownList;list.DataSource = new DataTable ...
- WPF中Image控件的Source属性
原文:WPF中Image控件的Source属性 imgBook 是一个Image控件,在后台代码中我想给它指定Source的属性.我先如下方式进行: Uri uri = new Uri(strImag ...
- WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...
- WPF中Ribbon控件的使用
这篇博客将分享如何在WPF程序中使用Ribbon控件.Ribbon可以很大的提高软件的便捷性. 上面截图使Outlook 2010的界面,在Home标签页中,将所属的Menu都平铺的布局,非常容易的可 ...
- WPF自定义分页控件,样式自定义,简单易用
WPF自定义分页控件 做了许久伸手党,终于有机会贡献一波,搜索一下WPF分页控件,还是多,但是不太通用,主要就是样式问题,这个WPF很好解决,还有一个就是分页控件嘛,只关心几个数字的变动就行了,把页码 ...
- 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步
深入理解MVC MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...
- WPF 在image控件用鼠标拖拽出矩形
原文:WPF 在image控件用鼠标拖拽出矩形 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee ...
- WPF 4 DataGrid 控件(基本功能篇)
原文:WPF 4 DataGrid 控件(基本功能篇) 提到DataGrid 不管是网页还是应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将详细介绍WPF 4 中 ...
- WPF 4 DataGrid 控件(自定义样式篇)
原文:WPF 4 DataGrid 控件(自定义样式篇) 在<WPF 4 DataGrid 控件(基本功能篇)>中我们已经学习了DataGrid 的基本功能及使用方法.本篇将继续 ...
- WPF Calendar 日历控件 样式自定义
原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...
随机推荐
- 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
从 Chrome 125 开始,支持了一个全新的 CSS 特性 - Anchor Positioning,翻译过来即是锚点定位. 在之前的文章中,我们较为系统的讲述了这个新特性的使用,感兴趣的可以翻开 ...
- 低代码 + DeepSeek:赋能开发者,效率飞跃新高度
活字格接入 DeepSeek 前段时间,小编陆续发布了关于葡萄城旗下产品 Wyn 和 SpreadJS 成功接入DeepSeek的技术文章,分享了两款产品与 DeepSeek 集成后的功能优势和应用场 ...
- 第二课 - 输入(按键)控制输出(LED)-设备树
在第一课中学习了如何安装NCS开发环境,以及如何新建一个工程,还有如何构建和下载到开发板.并运行了官方的LED闪烁例程. 设备树 我们继续跟着官方开发者学院的教程来学习第二课的课程.官方课程包含了以下 ...
- bee must have one register DataBase alias named `default`
bee must have one register DataBase alias named default 在你初始化db,注册默认数据库时,看看你是否import初始化注册数据库驱动driver ...
- vue学习二(计算属性computed和监听器watch)
1.1.computed 计算属性 先写注意事项把:computed和methods的区别 //computed定义的方法我们是以属性访问的形式调用的{{computedTest}} comp ...
- 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
前言 今天大姚给大家分享一款基于 .NET 开源(GPL-2.0 license).免费.功能强大的 Windows 远程连接管理工具,支持 RDP.VNC.SSH 等多种主流协议:mRemoteNG ...
- C# 多文件打包
public HttpResponseMessage GetZip() { var response = Request.CreateResponse(HttpStatusCode.OK); try ...
- Apollo批量给新创建的用户授可编辑权限
背景: 我们要在Apollo中批量给新创建的用户授可编辑权限 apollo系统版本: java-2.1.0 管理员账号:Apollo 可编辑账号:guoyabin 过程: 在没写这段代码的时候从网上搜 ...
- 【SpringMVC】数据转换 & 数据格式化
数据转换 & 数据格式化 & 数据校验 数据转换 数据绑定流程 Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinder ...
- web自动化:Javascript操作页面元素
某些特殊情况下,使用selenium的api无法操作页面元素,可以通过js来完成 一.Js定位 js操作中的webelement通过console控制台来进行js定位: WebElement webe ...