BitmapImage en WPF bloquea el archivo

Yo suelo:

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

esto no usa OnLoad Y el archivo aún está bloqueado para sobrescribirlo en el disco duro. ¿Alguna idea de cómo desbloquear?

Saludos

Como se muestra en la pregunta a la que se enlaza, debe llamar a BeginInit y EndInit, así como a establecer la propiedad UriSource:

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

Lea la BitmapImage desde el archivo y BitmapImage a escribirla con un 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; 

Tuve un problema similar y lo resolví con este método: (aquí se trata de una personalización de una respuesta)

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

Puedes abrir la imagen así:

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

Y libera la imagen inmediatamente después de cargarla.

Espero que pueda ayudar!

 BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);