2010-11-09 1 views
9

Ho un'istanza di System.Windows.Controls.Image, e impostare il contenuto di programmazione in quanto tale:WPF Image.Source caching in modo troppo aggressivo

Uri location = new Uri(uriString); 
image.Source = new BitmapImage(location); 

volte mi sa che l'immagine sul server è stato modificato e voglio aggiornarla , ma ogni volta che ripeto il codice precedente ottengo la stessa immagine.

Questo sembra essere un problema di memorizzazione nella cache, ma le due soluzioni ovvie - RequestCacheLevel e BitmapCacheOption - sembrano non fare nulla. Questo codice ha lo stesso risultato:

var cachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore)) { 
    CacheOption = BitmapCacheOption.None 
}; 
image.Source = new BitmapImage(location, cachePolicy); 
// Still uses the cached version. 

L'unico modo che ho trovato per forzare un aggiornamento è quello di aggiungere una stringa di query usa e getta per l'URI, che sembra funzionare, ma è anche un hack completo:

Uri location = new Uri(uriString + "?nonsense=" + new Random().Next()); 
image.Source = new BitmapImage(location); 
// This forces a refresh 

Come posso impedire che queste immagini vengano memorizzate nella cache e/o forzare un aggiornamento?

risposta

23

penso che è necessario impostare le CreateOptions sul BitmapImage a:

BitmapCreateOptions.IgnoreImageCache 
+3

Sì, questo lo risolve! Ugh, perché ci sono così tante opzioni di cache? –

+1

Mi ha salvato un sacco di lavoro per scoprirlo da solo. Grazie mille :) –

+1

questo ha risolto il problema della mia ragazza. Grazie! :) – Musikero31