UWP 最近使用的列表添加会导致 COM 类型异常



StackTrace

" at Windows.Storage.AccessCache.StorageItemMostRecentlyUsedList.Add(IStorageItem file, String metadata, RecentStorageItemVisibility visibility)\r at FluentVideoPlayer.Helpers.FileHelper.<>c__DisplayClass7_0.b__0()\r at Microsoft.Toolkit.Uwp.Helpers.DispatcherHelper.<>c__DisplayClass10_0'1.b__0()">

正在尝试将存储文件添加到最近使用列表,因此我收到此异常。

例外

已从对 COM 组件的调用返回 HRESULT E_FAIL

法典

internal async static Task AddToHistory(StorageFile fileToBeAdded) => await DispatcherHelper.ExecuteOnUIThreadAsync(() => StorageApplicationPermissions.MostRecentlyUsedList.Add(fileToBeAdded, "", RecentStorageItemVisibility.AppAndSystem));

我有这个静态方法可以在静态类中使用,因此我可以从应用程序中的任何页面调用它。我可以验证存储文件对象不是空和完美的 我也尝试通过使用DispatcherHelper来解决它,正如您在代码中看到的那样,但无论有没有它,两种情况下都会发生异常。

更新

我也尝试添加到FutureAccessList而不是MostRecentlyUsedList,并且在两种情况下都遇到相同的错误

更新 2

通常访问列表不会导致任何错误,就像我可以使用以下代码访问它一样

var mlist = StorageApplicationPermissions.MostRecentlyUsedList;
var entries = mlist.Entries;

错误仅在我尝试向其添加存储文件时发生。

问题出在部分存储文件中,我实际上是根据以下博客文章从KnownFolder.VideoLibrary查询文件。

https://blogs.msdn.microsoft.com/adamdwilson/2017/12/20/fast-file-enumeration-with-partially-initialized-storagefiles/

因此,当我们使用以下索引选项时,它实际上为我们初始化了部分存储文件,当我们尝试将其添加到最近使用的列表或未来访问列表时会导致异常

IndexerOption = IndexerOption.OnlyUseIndexerAndOptimizeForIndexedProperties

所以为了解决这个问题,我现在使用IndexerOption.UseIndexerWhenAvailable,现在我没有任何异常,但当然我牺牲了我以前使用部分存储文件的速度。这令人失望,因为当尝试使用完整存储文件执行工作时,它应该根据博客文章自动将部分存储文件初始化为完整存储文件。 但不幸的是,这里的情况并非如此。

相关内容

最新更新