2010-11-09 31 views
9

Tôi có một thể hiện của System.Windows.Controls.Image, và tôi đặt các nội dung theo chương trình như vậy:WPF Image.Source bộ nhớ đệm quá tích cực

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

Đôi khi tôi biết rằng hình ảnh trên máy chủ đã thay đổi và tôi muốn làm mới nó , nhưng mỗi khi tôi lặp lại đoạn mã trên, tôi có cùng một hình ảnh.

Điều này có vẻ là vấn đề bộ nhớ đệm, nhưng hai giải pháp hiển nhiên - RequestCacheLevelBitmapCacheOption - dường như không làm gì cả. Mã này có kết quả tương tự:

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

Cách duy nhất tôi đã tìm thấy để buộc một refresh là để nối thêm một chuỗi truy vấn throwaway để URI, mà dường như để làm việc, nhưng cũng là một hack hoàn chỉnh:

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

Làm cách nào để ngăn các hình ảnh này được lưu vào bộ nhớ cache và/hoặc buộc làm mới?

Trả lời

23

Tôi nghĩ rằng bạn cần phải đặt CreateOptions trên BitmapImage tới:

BitmapCreateOptions.IgnoreImageCache 
+3

Vâng, điều này giải quyết nó! Ugh, tại sao có rất nhiều tùy chọn bộ nhớ đệm? –

+1

Đã lưu cho tôi rất nhiều việc để tự tìm ra. Cảm ơn rất nhiều :) –

+1

điều này giải quyết vấn đề của bạn gái tôi. cảm ơn! :) – Musikero31

Các vấn đề liên quan