C# &引用;当任务不在前台时,不允许导航;在WP7应用程序中

C# &引用;当任务不在前台时,不允许导航;在WP7应用程序中,c#,windows-phone-7,C#,Windows Phone 7,我在WP 7.1中遇到一个错误,如下所示 无效操作例外 “当任务不在前台时,不允许导航” 在下面的代码行中 NavigationService.Navigate(new Uri("/PhotoPreview.xaml", UriKind.Relative)); 我不知道怎么解决它。如果您可以提供一些指针,那就太好了如果您需要从主UI线程调用它,请使用以下命令: Dispatcher.BeginInvoke(() => { NavigationService.Navigate(ne

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

无效操作例外 “当任务不在前台时,不允许导航”

在下面的代码行中

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

我不知道怎么解决它。如果您可以提供一些指针,那就太好了如果您需要从主UI线程调用它,请使用以下命令:

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

如果需要从主UI线程调用它,请使用以下命令:

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

虽然使用Dispatcher.BeginInvoke可能会有所帮助,但它可能无法解决您的问题。我还看到,如果两个冲突导航之间存在竞争条件,例如后退键和前进导航,或者两个前进导航,就会发生这种情况。请参阅。

使用Dispatcher.BeginInvoke可能会有所帮助,但它可能无法解决您的问题。我还看到,如果两个冲突导航之间存在竞争条件,例如后退键和前进导航,或者两个前进导航,就会发生这种情况。请参阅。

我在这里读到了字里行间的内容,并假设您正在使用CameraCaptureTask或PhotoChooseTask,因为您使用的导航字符串是“/PhotoPreview.xaml”

我自己解决了这个问题后发现,不仅需要确保在UI线程上调用导航(通过使用
Dispatcher.BeginInvoke()
)但是
CameraCaptureTask
对象必须在
PhoneApplicationPage
类中用类作用域声明,并且必须调用选择器构造函数并在页面的构造函数中分配完成的事件委托

private readonly CameraCaptureTask cameraCaptureTask;

public MainPage()
{
    cameraCaptureTask = new CameraCaptureTask();
    cameraCaptureTask.Completed += CameraCaptureCompleted;
}
否则,您的应用程序将在后台停用,并且永远不会收到照片。导致应用程序崩溃,出现以下异常之一:

  • 当任务不在前台时,不允许导航
  • 0x8000ffff
  • 任务完成后不允许导航 取消。错误:-2147220992
  • 任务启动时不允许导航 不在前景中。错误:-2147220990
还有一些提示:

也不要删除
CameraCaptureCompleted
方法中的事件处理程序,否则下次它将无法工作

您可能还想添加一些代码,以确保导航不会因为多次单击按钮而出现两次;触摸屏可能非常敏感!如果您只使用捕获任务,那么围绕Show()调用的try-catch块可以捕获
InvalidOperationException

tl;博士


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

我在这里阅读行间的内容,并假设您正在使用CameraCaptureTask或PhotoChooseTask,因为您使用的导航字符串是“/PhotoPreview.xaml”

private readonly CameraCaptureTask cameraCaptureTask;

public MainPage()
{
    cameraCaptureTask = new CameraCaptureTask();
    cameraCaptureTask.Completed += CameraCaptureCompleted;
}
我自己解决了这个问题后发现,不仅需要确保在UI线程上调用导航(通过使用
Dispatcher.BeginInvoke()
)但是
CameraCaptureTask
对象必须在
PhoneApplicationPage
类中用类作用域声明,并且必须调用选择器构造函数并在页面的构造函数中分配完成的事件委托

private readonly CameraCaptureTask cameraCaptureTask;

public MainPage()
{
    cameraCaptureTask = new CameraCaptureTask();
    cameraCaptureTask.Completed += CameraCaptureCompleted;
}
否则,您的应用程序将在后台停用,并且永远不会收到照片。导致应用程序崩溃,出现以下异常之一:

  • 当任务不在前台时,不允许导航
  • 0x8000ffff
  • 任务完成后不允许导航 取消。错误:-2147220992
  • 任务启动时不允许导航 不在前景中。错误:-2147220990
还有一些提示:

也不要删除
CameraCaptureCompleted
方法中的事件处理程序,否则下次它将无法工作

您可能还想添加一些代码,以确保导航不会因为多次单击按钮而出现两次;触摸屏可能非常敏感!如果您只使用捕获任务,那么围绕Show()调用的try-catch块可以捕获
InvalidOperationException

tl;博士


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

何时在后台线程中调用它?还是主UI线程?你什么时候在后台线程中调用它?还是主UI线程?
private readonly CameraCaptureTask cameraCaptureTask;

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