2011-08-17 480 views
9

这似乎是一个相当简单的问题,但我似乎无法找到解决方法。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,那么原始图像仍然被锁定,我无法删除它。即使我稍后尝试,它仍然处于锁定状态。任何想法我可以释放这个吗?

回答

12

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

+0

嗯有趣,我会试一试,看看它是否有效 – cost

+0

看起来像是修好了,谢谢!多么奇怪的解决方案,但肯定是一个有效的方法。 – cost

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; 
相关问题