我在WP 7.1中遇到错误,如下所示
出现InvalidOperationException “当任务不在前台时,不允许导航”
在以下代码行中
NavigationService.Navigate(new Uri("/PhotoPreview.xaml", UriKind.Relative));
我没有任何线索如何解决它。如果你能提供一些指示,那就太棒了
答案 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;
}
否则您的应用程序将在后台停用,并且永远不会收到照片。导致应用程序崩溃,并出现以下异常之一:
一些进一步的提示:
请勿在{{1}}方法中删除事件处理程序,否则下次无法使用该事件处理程序!
您可能还想添加一些代码,以确保导致多次按钮点击无法进行导航,例如;触摸屏可能非常敏感!如果您只使用捕获任务,那么围绕Show()调用try catch块以捕获CameraCaptureCompleted
应该没问题。
TL;博士
仅在页面构造函数中指定CameraCaptureTask / PhotoChooser及其事件处理程序。