1

画像パス (ObservableCollection をソースとして) を持つ Listbox があり、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

おそらく aFileStreamと を使用できますStreamSource

BitmapImageの作成後にストリームを閉じる場合は、 CacheOptionプロパティをBitmapCacheOption.OnLoadに設定します。デフォルトのOnDemandキャッシュ オプションは、ビットマップが必要になるまでストリームへのアクセスを保持し、クリーンアップはガベージ コレクターによって処理されます。

于 2013-05-07T13:57:28.573 に答える