Я использую FilePicker для универсальных приложений Windows и пытаюсь запустить средство выбора файлов из MainPage.xaml, а затем перейти на другую страницу (LoadPhoto.xaml) для отображения выбранного изображения.
Сначала я реализовал свое приложение так, чтобы переходить к LoadPhoto.xaml, а затем, как часть загрузки страницы, я вызывал средство выбора файлов. Однако это вызвало проблемы при возобновлении работы приложения, поэтому я переместил вызов средства выбора файлов из конструктора.
В новейшей реализации я вызываю средство выбора файлов из MainPage.xaml, а затем, если была выбрана фотография, перехожу к LoadPhoto.xaml. Однако, похоже, где-то возникает состояние гонки: иногда приложение остается на главной странице после выбора изображения (похоже, что оно на самом деле переходит на страницу LoadPhoto, но что-то заставляет фрейм вернуться на главную страницу). В других случаях приложение успешно переходит на страницу LoadPhoto и отображает изображение, но если я вернусь назад с помощью кнопки «Назад», а затем снова нажму кнопку «Выбрать фотографию», на короткое время отобразится FilePicker, а затем произойдет сбой приложения. Это поведение не воспроизводится с подключенным VS. Все работает нормально при выполнении в режиме отладки.
Я думаю, основная причина в том, что код ContinueFileOpenPicker
выполняется из рабочего потока, поэтому мне не следует вызывать this.Frame.Navigate(typeof(LoadPhoto), file);
из этого потока. Этот вызов должен быть сделан из основного потока, но я не уверен, как это сделать.
К сожалению, это не решает проблему: await CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { this.Frame.Navigate(typeof(LoadPhoto), file); });
Как я могу перейти на другую страницу из метода ContinueFileOpenPicker? Полный код с репродукцией находится здесь.