uwp NeighbourFilesQuery иногда дает исключение System.OverflowException - PullRequest
0 голосов
/ 23 мая 2018

Я использую Аргументы событий, активированных файлами, аргументы , чтобы связать файлы в моем приложении видеопроигрывателя.Поэтому, когда пользователь дважды щелкает видеофайл, он открывает и воспроизводит файл в моем приложении, а также получает все соседние файлы, поэтому я также могу добавить их в список воспроизведения.Для этой цели я использую следующий код.

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 , я получаю все соседние файлы в соседнем файле Query, но я не получаю файл, по которому щелкнул, поэтому, когдакод пытается получить индекс этого файла, этот файл не существует в этом списке, поэтому я получаю индекс мусора.

так почему этот API-интерфейс настолько несовместим?иногда он включает выбранный файл в список файлов запросов, а иногда нет?

Примечание обратите внимание, что здесь я говорю только о сценарии с одним нажатием файла, а не о нескольких файлахоткрыт вместе (потому что в этом случае запрос файлов должен быть пустым, и это другой сценарий)

1 Ответ

0 голосов
/ 05 июня 2018

Согласно документации, когда 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,, мы увидим, что она доступна не для всех вызовов.Мы также заметим, что ни один из файлов mp4 не отображается в NeighboringFileQuery, поэтому, когда мы активируем, нажимая на mp4, mp4 все еще не отображается в списке NeighboringFileQuery.Когда вы вызываете, чтобы получить индекс, он возвращает uint.MaxValue, поскольку запрошенный файл отсутствует в запросе.Исключение возникает из-за переполнения при попытке преобразовать его в Int32.

В этом случае вам нужно проверить значение uint.MaxValue перед приведением / преобразованием в Int32.Вам также следует перехватить любое исключение, которое может произойти, поскольку вы получите переполнение для любого значения, превышающего int.MaxValue.

...