WPF中删除打开过的图片

原文:WPF中删除打开过的图片

在WPF中,当我们删除打开过的图片时,往往会遇到"...无法删除,文件正在被另一个进程使用"的异常。即使当前文件是打开后关闭过的也不行。

这个问题的原因很简单,是因为WPF的缓存策略导致图片被锁定了,解决的方式不是用默认的ImageSource的构造方法,改用如下方式:

    ImageSource
getImage(string file)
    {
        var bmp = new
BitmapImage();
        bmp.BeginInit();
        bmp.CacheOption = BitmapCacheOption.OnLoad;        //这一行很重要
        bmp.UriSource = new
Uri(file);
        bmp.EndInit();

        return bmp;
    }

这种方式本身并没有什么问题,但今天发现了更简单的一个方法,只要一行代码即可:

    BitmapFrame.Create(new
Uri(file), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);

这里记录一下,以后主要就用这种方式了。

时间: 2024-11-02 11:51:44

WPF中删除打开过的图片的相关文章

PowerPoint 2013中删除图片背景的方法

  PowerPoint 2013中删除图片背景的方法          1.启动PowerPoint 2013并创建新文档,在"插入"选项卡中单击"图像"组中的"图片"按钮打开"插入图片"对话框,选择需要插入的图片,如图1所示,然后单击"插入"按钮.   图1 选择需要插入的图片 2.此时选择的图片插入了幻灯片中,拖动图片边框上的控制柄将图片放大,以便于对图片进行操作.在"图片工具-格式&quo

Win7旗舰版系统如何删除鼠标右键中的”打开好桌道壁纸”选项

  方法一. 1.运行"regedit"打开注册表编辑器,然后点击"编辑-查找",在查找框中输入"打开好桌道壁纸"; 2.查到后右键删除,然后重复上面的步骤,直到把所有的全删了即可. 方法二.重新安装一个好桌道,然后卸载,这样就会没有了. 方法三.打开好桌道美化软件,然后点击更多功能―>软件设置,然后取消勾选"个性化"即可.

WPF中材质制作:图片和矢量图之争

如果要做下面这样的一个东西作为背景.你会如何做呢? 图1. 目标背景效果 方案一,用PS画出来.然后把这个PNG图片作为背景色.这个方案可以,但是 如果想让这个线的颜色可配置呢?如何线的粗细不确定呢?无论哪个问题,用像 素图的方式都不好解决. 方案二,用WPF的矢量图绘制.这个方案可以比较容易地解决上面两个问题. 但是无论我们用哪种方式,都不会把整个图的大小画出来.而是画是一个最小 的图元,然后重复. 标量图方案 对于PS画的标量而言,有下面这样的一个图就可以了.然后在要绘制的区域内 无限重复.

.NET 导出图片到Excel中,打开不显示(或提示受保护)问题。

问题描述 .NET 导出图片到Excel中,打开不显示(或提示受保护)问题. public static MemoryStream TablesToExcelForXLSX(DataTable dt, DataTable reportTable, string file, int timeCount, string exportAll, string exportDatasource, string exportChart, out byte[] buf) { //HSSFWorkbook //

C#中listview加载的图片,批量删除时出现异常“文件被另一个程序使用”,具体代码如下

问题描述 C#中listview加载的图片,批量删除时出现异常"文件被另一个程序使用",具体代码如下 自动加载图片: private void FrmPicListView_Load(object sender EventArgs e) { listView1.View = View.LargeIcon; listView1.MultiSelect = true; string[] files = GetImages(); if (files != null) { ImageList

asp.net-没有数据库,直接从文件夹中读取显示页面中图片,可以实现点击图片就给他从页面和文件夹中删除吗

问题描述 没有数据库,直接从文件夹中读取显示页面中图片,可以实现点击图片就给他从页面和文件夹中删除吗 这个是显示的具体代码,前台页面就设置了个div id='img'显示到这里的,但是我想了好久不知道怎么实现删除了 解决方案 可以啊,html中,加上图片名称或路径,点击时调用后台接口,接口去删除服务器上的实际图片 解决方案二: 点击时,把连接传给后台接口,通过ajax,后台成功后返回,你在remove掉这个img元素

为什么在asp.net中删除新建好的文件夹,在新建文件夹图片不可以粘贴

问题描述 为什么在ASP.NET中添加文件夹存放图片,本来复制图片,粘贴可以,但是删除文件夹,在新建文件夹,复制图片,不可以粘贴 解决方案 解决方案二:不会的,你确认复制粘贴了?解决方案三:重启你的计算机.解决方案四:可以复制的啊,你是怎么复制粘贴的

请教WPF中打开浏览器,Post方式传递参数的问题

问题描述 现在在WPF中开发,遇到了一个问题:打算在WPF程序中打开一个网页,并给网页传递参数,在网页中获取参数信息并做处理.由于参数比较长而且含有中文,现在就遇到了这个问题:1.打开网页后,参数值不固定,如果过长,就会被IE截取地址,所以传过去的信息不全,而且会把参数以明文的形式显示出来,不方便.2.参数中有中文,这样导致在打开浏览器中,中文编程了乱码,在网页中获取的内容就不对了我是用Process.Start的方式打开网页的,现在想问问能不能用Post的方式打开,解决传递中参数过长.参数中中

wpf中richtextbox复制图片为什么占一行?怎样让他不占一行?

问题描述 wpf中richtextbox复制图片为什么占一行?怎样让他不占一行? 解决方案