【发布时间】:2018-11-02 09:41:43
【问题描述】:
我使用 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 如此不一致呢?有时它会将点击的文件包含在查询文件列表中,有时它不包含?
注意请注意,我在这里只讨论单击单个文件的场景,而不是一起打开多个文件(因为在这种情况下,文件查询应该是空的,这是不同的设想)。
【问题讨论】:
标签: c# xaml uwp storagefile overflowexception