1

我有一个带有图像路径的列表框(ObservableCollection 作为源),并且 IValueConverter 将它们转换为图像缩略图。

当我尝试删除任何这些文件时,我收到错误消息:

“该进程无法访问文件'C:\test.jpg',因为它正被另一个进程使用。”

public class UriToBitmapConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
     try
     {
        BitmapFrame bit = BitmapFrame.Create(new Uri(value.ToString()), BitmapCreateOptions.DelayCreation, BitmapCacheOption.OnDemand);
        if (bit.Thumbnail != null)
        {
         return bit.Thumbnail;
        }
        else
        {
          BitmapImage bi = new BitmapImage();
          bi.BeginInit();
          bi.DecodePixelWidth = 200;                    
          bi.UriSource = new Uri(value.ToString());
          bi.CacheOption = BitmapCacheOption.OnLoad;
          bi.EndInit();
          return bi;
         }
       }
     catch
     {
        return null;
     }
   }

如何强制释放图像或强制删除文件?谢谢你。

4

1 回答 1

2

您可能可以使用 aFileStreamStreamSource.

如果您希望在创建BitmapImage后关闭流,请将CacheOption属性设置为BitmapCacheOption.OnLoad。默认的OnDemand缓存选项保留对流的访问,直到需要位图,并且清理由垃圾收集器处理。

于 2013-05-07T13:57:28.573 回答