2010-11-09 10 views
9

mam instancję System.Windows.Controls.Image i ustawić zawartość programowo jako takie:WPF Image.Source buforowanie zbyt agresywnie

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

Czasami wiem, że obraz na serwerze uległ zmianie i chcę go odświeżyć , ale za każdym razem, gdy powtarzam powyższy kod, otrzymuję ten sam obraz.

To wydaje się być problemem z buforowaniem, ale dwa oczywiste rozwiązania - RequestCacheLevel i BitmapCacheOption - wydają się nie robić nic. Kod ten ma ten sam wynik:

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

Jedynym sposobem znalazłem się wymusić odświeżenie ma dołączyć wyrzucenie ciąg kwerendy do URI, który wydaje się działać, ale również jest kompletnym Hack:

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

Jak mogę zapobiec buforowaniu tych obrazów i/lub wymuszam odświeżanie?

Odpowiedz

23

myślę, że trzeba ustawić CreateOptions na BitmapImage do:

BitmapCreateOptions.IgnoreImageCache 
+3

Tak, to rozwiązuje go! Ugh, dlaczego jest tak wiele opcji buforowania? –

+1

Zaoszczędziłem wiele pracy, sam się o tym przekonałem. Wielkie dzięki :) –

+1

to rozwiązało problem mojej dziewczyny. dzięki! :) – Musikero31