C# - WPF如何取消引用BitmapImage以便删除源文件?

10

这似乎是一个相当简单的问题,但我似乎无法找到解决方法。

在一个WPF窗口中,我有一张图片,名为image_small_pic。在相关联的C#文件中,我使用以下代码设置了该值:

Uri src = new Uri(image_source, UriKind.RelativeOrAbsolute);
small_image_bmp = new BitmapImage(src);
image_small_pic.Source = small_image_bmp;

small_image_bmp是一个公共的BitmapImage对象。但是,如果我后来将small_image_bmp更改为另一个文件并重新分配image_small_pic.Source,那么原始图像仍然被锁定,我无法删除它。即使我稍后尝试删除,它仍然被锁定。你有什么想法如何释放它呢?

2个回答

14

查看这篇文章。你遇到了一些与WPF图像相关的奇怪行为。解决方案是自己读取字节,然后基于这些字节创建图像,因为如果让框架处理它,文件将保持锁定状态。


看起来问题已经解决了,谢谢!这是一个奇怪的解决方案,但肯定是有效的。 - cost

3
Uri src = new Uri(image_source, UriKind.RelativeOrAbsolute);
var small_image_bmp = new BitmapImage();
small_image_bmp.BeginInit();
small_image_bmp.CacheOption = BitmapCacheOption.OnLoad;
small_image_bmp.UriSource = src;
small_image_bmp.EndInit();

image_small_pic.Source = small_image_bmp;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接