3
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

次のコードを使用して新しいページをプッシュしています

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

次の行がinvalidoperationexceptionをスローしているようです

scrObj.NavigationService.Navigate(navigateUritemp);

誰かがこのコードの何が悪いのかわかりますか?

4

3 に答える 3

3

これがInvalidOperationException発生する一般的な状況の1つは、複数のナビゲーションが同時に試行された場合、またはアプリがフォアグラウンドにないときにナビゲーションが試行された場合です。

これは、たとえば、ナビゲーションが遅いときにユーザーがアプリバーボタンをもう一度押すことができた場合に発生する可能性があります。

すばやく検索すると、他の人が同じ種類のものを見たことがわかります-たとえば、http ://www.nickharris.net/2011/01/windows-phone-7-navigation-is-not-allowed-when-the-task-is-フォアグラウンドではない/

于 2012-05-14T16:03:53.647 に答える
0

使用してみてくださいif (scrObj.NavigationService.CurrentSource.equals(navigateUritemp))多分これは役立つでしょう。この例外は常に発生していますか?

于 2012-05-14T12:48:36.647 に答える
0

次のことを試してください。

  1. 新しいプロジェクトを作成し、残りのコードを削除して、NavigationServiceに関連するコードを保持します。
  2. フォルダを作成します(フォルダにホーム画面のような名前を付けます)
  3. 2つのXAMLページを追加します(例:Page1.xaml、Page2.xaml)
  4. MainPage.xamlからNavigationServiceコードをテストします 。これを

    試してください。

    NavigationService.Navigate(new Uri( "/ homescreen / Page1.xaml"、UriKind.Relative));
    または
    NavigationService.Navigate(new Uri( "/ homescreen / Page2.xaml"、UriKind.Relative));


UriKind.Relativeを使用している場合は、正しいパスを指定してください。たとえば、「homescreen / Page2.xaml」を使用する場合は、最初に「/homescreen/Page2.xaml」、「/」を使用する必要があります。パスのは、ASP.NETの「root」または「〜」のようなものです。

于 2012-05-14T13:05:01.393 に答える