Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

.net - WPF Image.Source caching too aggressively

I have an instance of System.Windows.Controls.Image, and I set the contents programmatically as such:

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

Sometimes I know that the image on the server has changed and I want to refresh it, but every time I repeat the above code I get the same image.

This seems to be a caching problem, but the two obvious solutions — RequestCacheLevel and BitmapCacheOption — seem to do nothing. This code has the same result:

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

The only way I've found to force a refresh is to append a throwaway query string to the URI, which seems to work, but also is a complete hack:

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

How can I prevent these images from being cached, and/or force a refresh?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I think you need to set the CreateOptions on the BitmapImage to:

BitmapCreateOptions.IgnoreImageCache

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...