2013-05-07 46 views
1

我有一个带图像路径的列表框(ObservableCollection作为源),并且IValueConverter将它们转换为图像缩略图。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; 
    } 
    } 

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

回答

2

您或许可以使用FileStreamStreamSource

Set the CacheOption property to BitmapCacheOption.OnLoad if you wish to close the stream after the BitmapImage is created. The default OnDemand cache option retains access to the stream until the bitmap is needed, and cleanup is handled by the garbage collector.

+0

解决了这个问题。正如你所说:FileStream fileStream = new FileStream(value.ToString(),FileMode.Open,FileAccess.Read); ... img.StreamSource = fileStream;非常感谢你! – Daniel 2013-05-07 16:09:59

+0

不客气,很高兴它帮助:) – 2013-05-07 16:10:50

+0

事实上,只是案例图像的第一部分工作已经有一个缩略图,但第二部分没有,现在没有图像。当我休息时,我可以看到:'(img.StreamSource).ReadTimeout'在部件img.StreamSource = fileStream上抛出了一个类型为'System.InvalidOperationException'的异常。 – Daniel 2013-05-07 16:21:46