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

时间:2011-08-17 14:38:51

标签: c# wpf image

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

在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 个答案:

答案 0 :(得分:13)

结帐this article。您遇到的WPF图像有一些奇怪的行为。解决方案是自己读取字节,然后根据它们创建一个图像,因为如果让框架处理它,文件将保持锁定状态。

答案 1 :(得分:2)

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;