WP7应用程序中“任务不在前台时不允许导航”

时间:2011-09-10 17:53:24

标签: c# windows-phone-7

我在WP 7.1中遇到错误,如下所示

出现InvalidOperationException “当任务不在前台时,不允许导航”

在以下代码行中

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

我没有任何线索如何解决它。如果你能提供一些指示,那就太棒了

3 个答案:

答案 0 :(得分:8)

如果您需要从主UI线程调用它,请使用:

Dispatcher.BeginInvoke(() =>
{
    NavigationService.Navigate(new Uri("/PhotoPreview.xaml", UriKind.Relative));
});

答案 1 :(得分:4)

虽然使用Dispatcher.BeginInvoke可能有所帮助,但它可能无法解决您的问题。我也看到如果两个冲突的导航之间存在竞争条件,例如,返回键和前进导航,或2个前进导航。请参阅discussion on App Hub

答案 2 :(得分:1)

我正在这里阅读这些行,并假设您正在使用CameraCaptureTask或PhotoChooserTask,因为您正在使用“/PhotoPreview.xaml”导航字符串。

在与此问题斗争后,我发现您不仅需要确保在UI线程上调用导航(使用Dispatcher.BeginInvoke()),而且必须使用类声明CameraCaptureTask对象PhoneApplicationPage类中的范围,您必须调用选择器构造函数并在页面的构造函数中指定Completed事件委托。

private readonly CameraCaptureTask cameraCaptureTask;

public MainPage()
{
    cameraCaptureTask = new CameraCaptureTask();
    cameraCaptureTask.Completed += CameraCaptureCompleted;
}

否则您的应用程序将在后台停用,并且永远不会收到照片。导致应用程序崩溃,并出现以下异常之一:

  • 当任务不在前台时,不允许导航
  • 0x8000ffff
  • 任务完成后不允许导航 取消。错误:-2147220992
  • 任务时不允许导航 不在前台。错误:-2147220990

一些进一步的提示:

请勿在{{1​​}}方法中删除事件处理程序,否则下次无法使用该事件处理程序!

您可能还想添加一些代码,以确保导致多次按钮点击无法进行导航,例如;触摸屏可能非常敏感!如果您只使用捕获任务,那么围绕Show()调用try catch块以捕获CameraCaptureCompleted应该没问题。

TL;博士

仅在页面构造函数中指定CameraCaptureTask / PhotoChooser及其事件处理程序。