2011-08-17 25 views
9

Esto parece un problema bastante simple, pero parece que no puedo encontrar la manera de evitarlo.C# - WPF ¿cómo desreferenciar una BitmapImage para poder eliminar el archivo fuente?

En una ventana de WPF tengo una imagen, image_small_pic. En el archivo de C# asociada fijo el valor de que el uso de este código:

Uri src = new Uri(image_source, UriKind.RelativeOrAbsolute); 
small_image_bmp = new BitmapImage(src); 
image_small_pic.Source = small_image_bmp; 

Dónde small_image_bmp es un objeto BitmapImage pública. Pero luego, si más adelante, si cambio small_image_bmp a otro archivo y reasigno image_small_pic.Source, entonces la imagen original todavía está bloqueada y no puedo borrarla. Incluso si lo intento más tarde, todavía está bloqueado. ¿Alguna idea de cómo puedo liberar esto?

Respuesta

12

Consulte this article. Hay un comportamiento extraño con las imágenes WPF con las que te encuentras. La solución es leer los bytes usted mismo y luego crear una imagen basada en ellos, ya que si deja que el marco lo maneje, el archivo permanecerá bloqueado.

+0

Hmmm interesante, voy a intentarlo y ver si funciona – cost

+0

Parece que lo arregló, gracias! Qué solución más extraña, pero ciertamente una que funciona. – cost

2
Uri src = new Uri(image_source, UriKind.RelativeOrAbsolute); 
var small_image_bmp = new BitmapImage(); 
small_image_bmp.BeginInit(); 
small_image_bmp.CacheOption = BitmapCacheOption.OnLoad; 
small_image_bmp.UriSource = src; 
small_image_bmp.EndInit(); 

image_small_pic.Source = small_image_bmp; 
Cuestiones relacionadas