释放文件句柄。 来自BitmapImage的ImageSource

如何释放此文件的句柄?

img的类型为System.Windows.Controls.Image

private void Load() { ImageSource imageSrc = new BitmapImage(new Uri(filePath)); img.Source = imageSrc; //Do Work imageSrc = null; img.Source = null; File.Delete(filePath); // File is being used by another process. } 


 private void Load() { ImageSource imageSrc = BitmapFromUri(new Uri(filePath)); img.Source = imageSrc; //Do Work imageSrc = null; img.Source = null; File.Delete(filePath); // File deleted. } public static ImageSource BitmapFromUri(Uri source) { var bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = source; bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.EndInit(); return bitmap; } 

在MSDN论坛上找到答案。

除非将缓存选项设置为BitmapCacheOption.OnLoad,否则不会关闭位图流。 所以你需要这样的东西:

 public static ImageSource BitmapFromUri(Uri source) { var bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = source; bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.EndInit(); return bitmap; } 

当您使用上述方法获得ImageSource时,源文件将立即关闭。

看MSDN社交论坛

我在一个特别令人不安的形象上一直遇到问题。 接受的答案对我不起作用。

相反,我使用流来填充位图:

 using (FileStream fs = new FileStream(path, FileMode.Open)) { bitmap.BeginInit(); bitmap.StreamSource = fs; bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.EndInit(); } 

这导致文件句柄被释放。