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

这似乎是一个相当简单的问题,但我似乎无法想办法解决它。

在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,那么原始图像仍然被锁定,我无法删除它。 即使我稍后尝试它仍然被锁定。 有什么想法我可以解决这个问题吗?

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

 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;