«Навигация не разрешена, когда задача не на переднем плане» в приложении WP7 - PullRequest
1 голос
/ 10 сентября 2011

Я получаю сообщение об ошибке в WP 7.1, как показано ниже

InvalidOperationException «Навигация не разрешена, если задача не на переднем плане»

В следующей строке кода

NavigationService.Navigate(new Uri("/PhotoPreview.xaml", UriKind.Relative));

Понятия не имею, как это решить. Было бы здорово, если бы вы могли предоставить несколько указателей

Ответы [ 3 ]

8 голосов
/ 10 сентября 2011

Если вам нужно вызвать его из основного потока пользовательского интерфейса, используйте это:

Dispatcher.BeginInvoke(() =>
{
    NavigationService.Navigate(new Uri("/PhotoPreview.xaml", UriKind.Relative));
});
4 голосов
/ 11 сентября 2011

Хотя использование Dispatcher.BeginInvoke может помочь, оно может не решить вашу проблему. Я также видел, как это происходит, если между двумя конфликтующими навигациями существует условие гонки, например, клавиша возврата и навигация вперед или 2 навигация вперед. См. обсуждение в App Hub .

1 голос
/ 28 февраля 2012

Я читаю между строк здесь и предполагаю, что вы используете либо 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и это обработчик событий в конструкторе вашей страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...