【发布时间】:2018-03-28 12:41:04
【问题描述】:
好的,所以我有一个简单的 uwp 应用程序,我正在尝试从 KnownFolders.VideoLibrary 获取数据并使其更快,我正在使用 indexing 和 QueryOptions 。奇怪的是,在第一次加载页面时我没有收到任何错误,但是当我尝试深入到另一个文件夹并再次导航到同一页面时,我得到了这个 Com Exception
错误的类型为 System.Runtime.InteropServices.COMException
对 COM 组件的调用返回了错误 HRESULT E_FAIL
我的 ViewModel 中的 FillFolders 方法**
private async Task FillUpFolders()
{
uint index = 0, stepSize = 5;
//on the first load of the LibraryPage I dont get any exception
//but on the 2nd load, I get exception on the line below.
var VideoQuery = FileHelper.GetVideoFoldersQuery(MainFolder, 200);
IReadOnlyList<StorageFolder> folders = await VideoQuery.GetFoldersAsync(index, stepSize);
index += 5;
while (folders.Count != 0)
{
var folderTask = VideoQuery.GetFoldersAsync(index, stepSize).AsTask();
foreach (StorageFolder folder in folders)
{
var vv = new Folder
{
MyStorageFolder = folder,
Title = folder.DisplayName,
Thumbnail = new BitmapImage(new Uri("ms-appx:///Assets/FolderIcon.png")),
MyStretch = Windows.UI.Xaml.Media.Stretch.Uniform
};
Source.Add(vv);
}
folders = await folderTask;
index += 5;
}
}
视频文件查询方法
internal static StorageFolderQueryResult GetVideoFoldersQuery(StorageFolder Folder, uint thumbnailRequestedSize)
{
if (videoFolderOptions is null)
{
videoFolderOptions = new QueryOptions(CommonFolderQuery.DefaultQuery)
{
IndexerOption = IndexerOption.OnlyUseIndexerAndOptimizeForIndexedProperties//check sort order later
};
videoFolderOptions.SetThumbnailPrefetch(ThumbnailMode.VideosView, thumbnailRequestedSize, ThumbnailOptions.UseCurrentScale);
}
return Folder.CreateFolderQueryWithOptions(videoFolderOptions);
}
我在 github 存储库上提供我的项目,因此任何人都可以轻松重现问题并轻松分析它。
https://github.com/touseefbsb/UWPStorageFolderBug
堆栈跟踪
" 在 Windows.Storage.StorageFolder.CreateFolderQueryWithOptions(QueryOptions queryOptions)\r\n 在 Fluent_Video_Player.Helpers.FileHelper.GetVideoFoldersQuery(StorageFolder 文件夹,UInt32 thumbnailRequestedSize)\r\n 在 Fluent_Video_Player.ViewModels.LibraryViewModel.d__11.MoveNext( )\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n 在 Fluent_Video_Player.ViewModels.LibraryViewModel.d__9.MoveNext()\r\n--- 堆栈结束从先前引发异常的位置跟踪 ---\r\n System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\ n 在 System.Runtime.CompilerServ ices.TaskAwaiter.GetResult()\r\n 在 Fluent_Video_Player.Views.LibraryPage.d__5.MoveNext()"
复制步骤
- 克隆回购
- 在 VS 2017 中打开解决方案
- 运行应用程序
- 从左侧导航菜单转到图书馆页面(注意这里没有错误)
- 单击任何文件夹以深入了解它
- 现在您将收到此异常。
注意:我尝试在 LibraryPage.xaml.cs 和 FillUpFolders 上使用 Fill() 方法执行 ConfigureAwait(false) () 和 FillUpFiles() 方法在视图模型中这会导致 Marshall 线程,即使使用 Dispather helper 我也无法解决强>
【问题讨论】:
-
33 人看到了这个问题,连一条评论都没有,大家都对这个错误一无所知吗? ://
-
是的。我试过你的应用程序,我得到了同样的行为,我一无所知。
-
@PhilJollans 是的,现在更令人沮丧:P
标签: c# uwp com-interop uwp-xaml video-library