BitmapImage в WPF блокирует файл - PullRequest
15 голосов
/ 21 июня 2011

Я использую:

Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad

это не Использовать OnLoad И файл все еще заблокирован для перезаписи на жестком диске.Есть идеи как разблокировать?

С уважением

Ответы [ 4 ]

32 голосов
/ 21 июня 2011

Как показано в вопросе, на который вы ссылаетесь, вам нужно вызвать BeginInit и EndInit, например, а также установить свойство UriSource:

Dim bmi As New BitmapImage()
bmi.BeginInit()
bmi.CacheOption = BitmapCacheOption.OnLoad
bmi.UriSource = New Uri(fiInfo.FullName, UriKind.Absolute)
bmi.EndInit()
8 голосов
/ 21 июня 2011

Считайте BitmapImage из файла и перепишите его с MemoryStream:

MemoryStream ms = new MemoryStream();
BitmapImage bi = new BitmapImage();
byte[] bytArray = File.ReadAllBytes(@"test.jpg");
ms.Write(bytArray, 0, bytArray.Length);ms.Position = 0;
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
image.Source = bi;
2 голосов
/ 15 сентября 2014

У меня была похожая проблема, и я решил с помощью этого метода: (это персонализация ответа здесь )

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

Вы можете открыть изображение следующим образом:

BitmapImage bimg = BitmapFromUri(new Uri(some_URI));

И сразу после загрузки оно освобождает изображение.

Надеюсь, это поможет!

1 голос
/ 04 сентября 2014
BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
...