gpt4 book ai didi

c++ - 如何在基于 Windows 8 Xaml 的 ListView 中禁用缓存?

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:56 25 4
gpt4 key购买 nike

我想做的是用预加载的图像动态填充 Windows 8 Metro 应用程序中的 ListView。

对于每个项目 (URI),我使用这样的代码 (C++) 来简单地完成它:

Windows::UI::Xaml::Media::Imaging::BitmapImage^ bitmapSrc =
ref new Windows::UI::Xaml::Media::Imaging::BitmapImage();

bitmapSrc->CreateOptions = Windows::UI::Xaml::Media::Imaging::BitmapCreateOptions::IgnoreImageCache;

bitmapSrc->UriSource = uri;

img->Source = bitmapSrc;

LoadListView->Items->Append(img);

但是当我删除(在应用程序中)由 URI 描述的源图像并创建具有相同名称的新文件并尝试将其重新加载到列表中时,我失败了,显示的图像是旧图像(已删除)。我假设一些缓存在这里工作。我试图通过 CreateOptions 中的 IgnoreImageCache 值来避免缓存,但它没有用。

关于如何在 Windows 8 应用程序中禁用可能绑定(bind)到 ListView 的 BitmapSource(图像)缓存的任何线索?

我尝试了几个受 Silverlight 和 WPF 启发的方向,不幸的是没有一个奏效。

最佳答案

受到评论的鼓舞,我给出了自己找到的答案。

此处解释了更广泛的上下文(以及 C# 视角): http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/171dfe66-78b5-4340-bd78-244337f31287/

不久我认为这里的引用计数有问题。只要 Uri 有效并分配给对象实例,WinRT 就会将图像加载(缓存)在 BitmapImage^ 中,在我的示例中该对象实例已添加到列表中。

在从列表中释放 Uri 之前从 BitmapImage^ 中清除它解决了我的问题。

根据相关示例,以下代码解决了问题(包含在执行列表删除的部分中):

auto item = (Image^)LoadListView->Items->GetAt(selected);
auto src = (Windows::UI::Xaml::Media::Imaging::BitmapImage^)item->Source;

src->UriSource = nullptr; //this line is critical

LoadListView->Items->RemoveAt(selected);

关于c++ - 如何在基于 Windows 8 Xaml 的 ListView 中禁用缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com