Almacenamiento en caché de imágenes WPF

Tengo una aplicación WPF que toma una imagen instantánea de un archivo de video. El usuario puede definir la marca de tiempo desde la cual tomará la imagen. La imagen se guarda luego en una ubicación temporal en el disco y luego se procesa en un elemento .

El usuario debería poder seleccionar una marca de tiempo diferente, que luego sobrescribe el archivo temporal en el disco; esto debería mostrarse en el elemento .

Usando Image.Source = null; , Puedo borrar el archivo de elemento , por lo que muestra un espacio en blanco. Sin embargo, si el archivo de imagen de origen se sobrescribe con una nueva imagen (con el mismo nombre) y se carga en el elemento , aún muestra la imagen anterior .

Estoy usando la siguiente lógica:

 // Overwrite temporary file file here // Clear out the reference to the temporary image Image_Preview.Source = null; // Load in new image (same source file name) Image = new BitmapImage(); Image.BeginInit(); Image.CacheOption = BitmapCacheOption.OnLoad; Image.UriSource = new Uri(file); Image.EndInit(); Image_Preview.Source = Image; 

La imagen que se muestra en el elemento no cambia, aunque el archivo original haya sido completamente reemplazado. ¿Hay un problema de almacenamiento en caché de imágenes aquí que no conozco?

De forma predeterminada, WPF almacena en caché BitmapImages que se cargan desde URI.

Puede evitar eso estableciendo el indicador BitmapCreateOptions.IgnoreImageCache :

 var image = new BitmapImage(); image.BeginInit(); image.CreateOptions = BitmapCreateOptions.IgnoreImageCache; image.CacheOption = BitmapCacheOption.OnLoad; image.UriSource = new Uri(file); image.EndInit(); Image_Preview.Source = image; 

O puedes cargar el BitmapImage directamente desde un Stream:

 var image = new BitmapImage(); using (var stream = new FileStream(file, FileMode.Open, FileAccess.Read)) { image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.StreamSource = stream; image.EndInit(); } Image_Preview.Source = image;