我是一个相当有经验的开发人员,但这让我在 UWP 中遇到了困难——我会保持简单。
假设我想浏览图片文件夹中的所有照片,为它们加水印,并将加水印的版本保存在图片的子文件夹中(例如图片\水印)
听起来容易吗?
尝试 1:使用 GetFilesAsync(包括 GetItemsAsync、GetFoldersAsync)- 此方法遍历每个文件,为我提供所需的 StorageFile 对象。
这种方法有两个问题:
在扫描完每个文件之前,我无法显示进度条,这在 UWP 中速度非常慢。
如果我保留对 StorageFile 对象的任何引用,运行时代理将消耗所有内存(因此枚举并再次枚举以获取进度非常慢,认为比 Win32 慢 1,000 倍)
尝试 2:使用查询 - 此方法涉及使用 Windows.System.Search 和查询返回指向所有文件的指针列表 (ish)。然后,我可以使用 StorageFolderQueryResult 动态获取每个 StorageFile 并立即释放,以便运行时代理运行。这非常快,因为它使用 Windows 索引系统,非常非常快。
问题是查询系统相当愚蠢,一旦我创建了子文件夹“Watermarked Photos”,查询返回的存储文件(查询时不存在)开始包含 Watermarked 文件夹中的文件。看起来查询实际上只是一些文件,而不是实际文件的静态列表,因此根据在其范围内调用查询后添加/删除的任何文件,结果是任意的。
有人对如何做到这一点有想法吗?