Windows phone 7 System.Windows.Navigation.NavigationService.Navigate正在引发invalidoperationexception

Windows phone 7 System.Windows.Navigation.NavigationService.Navigate正在引发invalidoperationexception,windows-phone-7,Windows Phone 7,我正在使用以下代码来推送新页面 Frame Image Function Offset 0 coredll.dll xxx_RaiseException 19 1 mscoree3_7.dll

我正在使用以下代码来推送新页面

Frame    Image             Function                                                Offset    
0        coredll.dll       xxx_RaiseException                                      19        
1        mscoree3_7.dll                                                            436488    
2        mscoree3_7.dll                                                            386545    
3        mscoree3_7.dll                                                            540936    
4                          TransitionStub                                          0         
5                          System.Windows.Navigation.NavigationService.Navigate    1652      
6                          XXX.Components.pushScreen        172       
7                          XXX.pushHomeScr                                 996       
8                          XXX.update                                      1488      
9                          .__c__DisplayClass3._ResponseReady_b__0                 700       
10       mscoree3_7.dll                                                            429164    
11       mscoree3_7.dll                                                            185803    
12       mscoree3_7.dll                                                            184423    
13                         System.Reflection.RuntimeMethodInfo.InternalInvoke      112       
14                         System.Reflection.RuntimeMethodInfo.InternalInvoke      1556      
15                         System.Reflection.MethodBase.Invoke                     104       
16                         System.Delegate.DynamicInvokeOne                        476       
17                         System.MulticastDelegate.DynamicInvokeImpl              84        
18                         System.Windows.Threading.DispatcherOperation.Invoke     80        
19                         System.Windows.Threading.Dispatcher.Dispatch            404
下面的行似乎正在抛出invalidoperationexception

Uri navigateUritemp = new Uri(url, UriKind.RelativeOrAbsolute);
if(scrObj.NavigationService.CurrentSource != navigateUritemp)
{
scrObj.NavigationService.Navigate(navigateUritemp);
}

有人能说出这段代码的错误吗?

尝试使用
如果(scrObj.NavigationService.CurrentSource.equals(navigateUritemp))
也许这会有所帮助。您是否总是遇到此异常?

请尝试执行以下操作:

  • 创建一个新项目并删除其余代码,并保留与NavigationService相关的代码
  • 将文件夹装入板条箱(将文件夹命名为类似主屏幕的名称)
  • 添加2个XAML页面(例如:Page1.XAML,Page2.XAML)
  • 测试MainPage.xaml中的导航服务代码

    试试这个:

    NavigationService.Navigate(新Uri(“/homescreen/Page1.xaml”,UriKind.Relative));

    NavigationService.Navigate(新Uri(“/homescreen/Page2.xaml”,UriKind.Relative))



  • 如果您使用的是UriKind.Relative,请确保指定正确的路径,例如:如果您使用“homescreen/Page2.xaml”,则必须使用“/homescreen/Page2.xaml”,路径开头的“/”类似于“root”或“~”在ASP.NET中

    我看到的一种常见情况是,如果同时尝试了多个导航,或者当应用程序不在前台时尝试了导航,则会发生无效操作异常

    例如,如果用户在缓慢导航时第二次点击appbar按钮,就会发生这种情况


    快速搜索会发现其他人也看到过类似的东西-例如,

    从app hub获得堆栈跟踪,上面写着scrObj.NavigationService.Navigate(navigateUritemp);正在抛出invalidoperationexception。我试图找到引发此异常的流。navigateUritemp是包含正确字符串的URI,例如:homescreen/homescreen.xaml我甚至没有一次遇到过这种异常。我从AppHub获得了上面发布的堆栈跟踪。它看起来像scrObj.NavigationService.Navigate(navigationEurItemp);当navigateUritemp为null时将引发异常。但在代码中,它在任何时候都不会为空:(尝试调试它。在此操作之前放置一个断点,并检查是否一切正常。我指的是所有分配。我只有两种情况,即我正在发送有效字符串。“/XXX/login/MultipleDomain.xaml”和“/XXX/homescreen/homescreen.xaml?membername=“+membername+”&memberid=”+memberid。这里membername和memberid是字符串。即使我为这个参数发送null,我也不会得到异常。我将有效字符串作为Uri的参数发送。如果字符串将无效,那么我应该得到异常。我甚至一次也没有得到异常。但某些用户的异常似乎已经得到了。Uri有可能变成inv吗在某一点上是否有效?我硬编码为“NavigationService.Navigate(null,UriKind.Relative)),这里我得到了与我在上面发布的完全相同的堆栈跟踪确定尝试硬编码为“NavigationService.Navigate(“/folder/page.xaml”,UriKind.Relative))”看看导航服务是否工作正常这意味着你的代码很好,你必须在代码的另一个地方查找。据我所知,目标页面为空或不存在。您正在使用MVVM体系结构模式吗?
    scrObj.NavigationService.Navigate(navigateUritemp);