2

NavigationService.CanGoBack戻りますが、TrueこれらNavigationService.GoBack()の例外がスローされます:

A first chance exception of type 'System.ArgumentException' occurred in System.Windows.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in 

これは 2 つのケースで体系的に発生しますが、3 番目のケースでは問題なく動作します。

  • コールするとクラッシュNavigationService.GoBack() するOnNavigatedTo()
  • インターネットが利用できないときにスローさNavigationService.GoBack() れた結果としてWebExceptionHTTPWebRequest呼び出すとクラッシュする [1]
  • インターネットが利用可能であれば問題なく動作し、結果を取得して解析し、表示したNavigationService.GoBack()ときに呼び出します。HTTPWebRequest

私の理論はGoBack()、ページから別のページに移動した後、すぐに呼び出すことができないということHTTPWebRequestです.

編集:別の方法で行うことにしましたが、問題はナビゲーション アニメーションと Windows Phone C# ツールキット (2011 年 2 月版を使用) にある可能性があると思います。


[1] ケース 2 のコードの詳細:

私はシンプルHTTPWebRequestです。私のコールバックはこれを行い、機内モードのときにアプリがクラッシュします。が返さNavigationService.GoBack()れても、行は責任があります。NavigationService.CanGoBacktrue

        try
        {
            response = request.EndGetResponse(result);
        }
        catch (WebException)
        {
            Dispatcher.BeginInvoke(() =>
            {
                NavigationService.GoBack();
            });
        }

私も使ってみDeployment.Current.Dispatcher.BeginInvoke()ました。

4

1 に答える 1

0

を使用してみてWebClient client = new WebClient();から、 を使用client.DownloadStringAsync(new Uri("request_url"));してリクエストを作成し、イベントにサブスクライブしてclient.DownloadStringCompleted、リクエストが完了したときにデータを受け取ることができます。データを解析した後、イベント ハンドラーで、必要なページを呼び出しNavigationService.GoBack();たり、そこに移動したりできます。

OnNavigatedToまた、イベントで何かをしようとして問題が発生した場合は、OnNavigatingFrom代わりに (前のページの c) を使用して、ナビゲーションをキャンセルしe.Cancel = true;、リクエストなどを行い、アプリケーション フレームを取得して、に移動しe.Uriます (基本的に、以前にキャンセルしたナビゲーションを続行します)。

この 2 番目の方法も解決策になる可能性がありますが、すべての作業を非同期で行うため、UI スレッドをブロックしない最初の方法の方が優れていると思います。これは、私がアプリで通常使用するものです。それが役に立てば幸い。

于 2011-10-21T18:59:56.170 に答える