如何在WPF应用程序的客户端上缓存图像?

Sim*_*her 13 wpf image http

我们正在开发一个WPF桌面应用程序,它显示当前通过HTTP获取的图像.

图像已经针对质量/尺寸进行了优化,但每次获取图像时都会有明显的等待.

有没有办法在客户端缓存图像,以便每次都不下载它们?

jms*_*era 11

我知道这个问题是很老了,但我不得不在WPF应用程序最近使用的缓存,发现有在.net 3.5 BitmapImage的一个更好的选择通过设置UriCachePolicy,将使用系统级高速缓存:

<Image.Source>
  <BitmapImage UriCachePolicy="Revalidate" 
     UriSource="https://farm3.staticflickr.com/2345/2077570455_03891081db.jpg"/>
</Image.Source>
Run Code Online (Sandbox Code Playgroud)

您甚至可以在app.config中设置该值,以使您的所有应用程序都使用默认值进行缓存:

<system.net>
  <requestCaching defaultPolicyLevel="CacheIfAvailable"/>
</system.net>
Run Code Online (Sandbox Code Playgroud)

您将在这里找到RequestCacheLevel值的解释:http://msdn.microsoft.com/en-us/library/system.net.cache.requestcachelevel(v=vs.110).aspx

此功能可以理解HTTP/1.1标头,因此如果您设置了Revalidate,它会使用If-Modified-Since标头来避免每次下载,但仍然会检查图像是否已更改,因此您始终拥有正确的图像.


Har*_*til 8

对于通过谷歌来到这里的人,我已经打包了Simon Hartcher发布的原始实现,由Jeroen van Langen重构(以及来自Ivan Leonenko的调整以使其可绑定),成为开源NuGet包.

请在此处查找详细信息 - http://floydpink.github.io/CachedImage/

  • 我不认为你能相信我为 Jeroen 构建的原始代码做出了贡献?他说他在回答中使用了我的代码。 (2认同)