我使用FileActivatedEventArgs args在我的视频播放器应用程序中进行文件关联。因此,当用户双击打开的视频文件并在我的应用程序中播放该文件时,它还会获取所有相邻文件,因此我也可以将它们添加到播放列表中。为此,我使用以下代码。
var file=args.Files[0];
StorageFileQueryResult neighboringFilesQuery=args.NeighboringFilesQuery;
var startingIndexunit = await neighboringFilesQuery.FindStartIndexAsync(file);
int startingIndex = Convert.ToInt32(startingIndexunit); //this is where exception occurs
并非总是如此,但有时当我打开一个文件时,我会得到一个System.OverFlowException,因为代码试图将一个非常大的垃圾号输入int32,这会导致异常。
经过进一步调查,我发现通常当我双击一个文件并获取邻居文件时,我会获取NeighborFilesQuery中的所有文件(包括我单击打开的 1 个文件),所以我可以找到它的索引,这样我就可以设置起始索引在我的应用程序中播放我的播放列表,并在正确的位置播放单击的文件。
但在其他一些情况下,例如当我打开一个.flv或某个.rm文件时,我会在 neighborfilesQuery 中获得所有邻居文件,但没有获得我单击的文件,因此当代码尝试获取该文件的索引时文件,该文件在该列表中不存在,因此我得到一个垃圾索引。
那么为什么这个 api 如此不一致呢?有时它在查询文件列表中包含单击的文件,有时它不包含?
请注意,我在这里只讨论单个文件单击的场景,而不是一起打开的多个文件(因为在这种情况下,文件查询应该是空的,这是一个不同的场景)。