Я читаю между строк здесь и предполагаю, что вы используете либо CameraCaptureTask, либо PhotoChooserTask из-за используемой строки навигации "/PhotoPreview.xaml".
После борьбы с этой проблемой я самобнаружил, что вам нужно не только убедиться, что навигация вызывается в потоке пользовательского интерфейса (с помощью Dispatcher.BeginInvoke()
), но и объект CameraCaptureTask
должен быть объявлен с областью действия класса в классе PhoneApplicationPage
, и вы должны вызвать конструктор chooserи назначьте делегат события Completed в конструкторе страницы.
private readonly CameraCaptureTask cameraCaptureTask;
public MainPage()
{
cameraCaptureTask = new CameraCaptureTask();
cameraCaptureTask.Completed += CameraCaptureCompleted;
}
, иначе ваше приложение будет деактивировано в фоновом режиме и никогда не получит фотографию.Вызывает сбой приложения с одним из следующих исключений:
- Навигация не разрешена, если задача не находится на переднем плане
- 0x8000ffff
- Навигация не разрешенапосле того, как задача была отменена.Ошибка: -2147220992
- Навигация не разрешена, если задача находится не на переднем плане.Ошибка: -2147220990
Некоторые дополнительные советы:
Не удаляйте обработчик событий в вашем методе CameraCaptureCompleted
, иначе он не будет работать в следующий раз!
Вы также можете добавить некоторый код, чтобы гарантировать, что навигация не может происходить дважды из-за нескольких нажатий кнопок, например;сенсорные экраны могут быть довольно чувствительными!Если вы используете только задачу захвата, блок try catch вокруг вызова Show () для перехвата InvalidOperationException
должен подойти.
tl; dr
Назначьте только CameraCaptureTask / PhotoChooserи это обработчик событий в конструкторе вашей страницы.