代码之家  ›  专栏  ›  技术社区  ›  Hank

WPF Image.Source缓存过于激进

  •  9
  • Hank  · 技术社区  · 14 年前

    System.Windows.Controls.Image ,并以编程方式设置内容:

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

    有时我知道服务器上的映像已更改,我想刷新它,但每次重复上述代码时,我都会得到相同的映像。

    这似乎是一个缓存问题,但有两个明显的解决方案 RequestCacheLevel BitmapCacheOption 好像什么也没做。此代码具有相同的结果:

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

    我发现强制刷新的唯一方法是向URI附加一个一次性查询字符串,这似乎很有效,但也是一个完整的技巧:

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

    如何防止这些图像被缓存和/或强制刷新?

    1 回复  |  直到 12 年前
        1
  •  23
  •   Colin Thomsen    14 年前

    我认为您需要将位图图像上的CreateOptions设置为:

    BitmapCreateOptions.IgnoreImageCache