【问题标题】:uwp NeighbourFilesQuery sometimes gives System.OverflowExceptionuwp NeighbourFilesQuery 有时会给出 System.OverflowException
【发布时间】:2018-11-02 09:41:43
【问题描述】:

我使用 File​Activated​Event​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,这会导致异常。

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

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

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

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

【问题讨论】:

    标签: c# xaml uwp storagefile overflowexception


    【解决方案1】:

    根据文档,当 FindStartIndexAsync 时,您应该期望看到 uint.MaxValue。 https://docs.microsoft.com/en-us/uwp/api/windows.storage.search.storagefilequeryresult.findstartindexasync

    如果我们在此处查看 NeighboringFilesQuery 文档:https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.activation.fileactivatedeventargs.neighboringfilesquery,我们会发现它不适用于所有调用。我们还会注意到 NeighboringFileQuery 中没有显示任何 mp4 文件,因此当我们通过单击 mp4 激活时,该 mp4 仍然不在 NeighboringFileQuery 列表中。当您调用获取索引时,它返回 uint.MaxValue 因为请求的文件不在查询中。尝试将其转换为 Int32 时,由于溢出而发生异常。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      相关资源
      最近更新 更多