C# uwp NeightourFilesQuery有时会给出System.OverflowException

C# uwp NeightourFilesQuery有时会给出System.OverflowException,c#,xaml,uwp,storagefile,overflowexception,C#,Xaml,Uwp,Storagefile,Overflowexception,我使用文件​激活​事件​Args Args在我的视频播放器应用程序中进行文件关联。因此,当用户双击一个视频文件时,它会打开并在我的应用程序中播放该文件,同时它会获取所有相邻的文件,因此我也可以将它们添加到播放列表中。为此,我使用以下代码 var file=args.Files[0]; StorageFileQueryResult neighboringFilesQuery=args.NeighboringFilesQuery; var startingIndexunit = await nei

我使用文件​激活​事件​Args 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中输入一个非常大的垃圾数,这会导致异常

经过进一步调查,我发现通常当我双击一个文件并获取邻居文件时,我会获取邻居文件库中的所有文件(包括我单击打开的1个文件),这样我就可以找到它的索引,这样我就可以在我的应用程序中设置播放列表的开始索引,并在正确的位置播放单击的文件

但在其他一些情况下,例如,当我打开一个.flv或一个.rm文件时,我会在NeighborFileQuery中获取所有相邻文件,但我没有获取我单击的文件,因此当代码试图获取该文件的索引时,该文件不存在于该列表中,因此我会获取一个垃圾索引

那么为什么这个api如此不一致呢?有时它会在“查询文件”列表中包含单击的文件,有时则不包含


注意请注意,我这里只讨论单击单个文件的情况,而不是一起打开多个文件(因为在这种情况下,文件查询应该是空的,这是另一种情况)

根据文档,当FindStartIndexAsync时,您应该看到uint.MaxValue。

如果我们在此处查看NeightringFilesQuery文档,我们会发现它并不适用于所有调用。我们还将注意到,没有一个mp4文件显示在NeightringFileQuery中,因此当我们通过单击mp4进行激活时,mp4仍然不在NeightringFileQuery列表中。调用以获取索引时,它将返回uint.MaxValue,因为请求的文件不在查询中。尝试将其转换为Int32时,由于溢出而发生异常

对于这种情况,您需要在强制转换/转换为Int32之前检查uint.MaxValue。您还应该捕获可能发生的任何异常,因为任何大于int.MaxValue的值都会溢出