2012-03-17 11 views
0

私は、リアルタイムXMLフィードのBART到着を表示するシンプルなWP7アプリを開発中です。その部分は働いていますが、私はこの問題を解決してMarketplaceの認定を受ける必要があります。ネットワーク接続がないときにWP7アプリがクラッシュするのを防ぐ

航空機モードのWP7デバイスでアプリをデバッグするときに、XML情報を取得しようとするとアプリがクラッシュします。

私は、ネットワーク接続をテストするためにオンラインで見つける方法は、トリックを行うようだ:

private bool InternetIsAvailable() 
    { 
     var available = !NetworkInterface.GetIsNetworkAvailable(); 
     #if DEBUG 
     available = false; 
     #endif 
     if (!available) 
     { 
      MessageBox.Show("No internet connection is available. Try again later."); 
      return false; 
     } 
     return true; 
    } 

コードは右の前にXMLをフェッチメソッドを呼び出す同じコードで(このように呼ばれているが、 )それを:ここで考えて

bool foo; 
foo=InternetIsAvailable(); 
if (foo == false) 
     { 
      NavigationService.Navigate(new Uri("/map.xaml", UriKind.Relative)); 


     } 

私は、何のネットワークアクセスがない場合、アプリがネットワーク・アクセス(というよりもクラッシュとmap.xamlがあるような時まで、前のページに戻るだろうということです前のページです)。しかし、ネットワークアクセスがないことを検出すると、アプリはまだクラッシュします。私はここで間違って何をしていますか?私はまた、C#を同時に学んでいるので、いくつかの例外処理機能がありますか?

おかげ

+0

try catchブロックにコードを挿入します。 – Dementic

答えて

1

あなたのコードの残りの部分を見なければ、とても、ネットワークアクセスとは何の関係もない多くの理由がある可能性がクラッシュしている理由私が言うことができません。

GetIsNetworkAvailableの呼び出しは正しいですが、そのコードは少し混乱しています(負の値を使用してから値を返す)。多くの否定的な比較は、コードを読みにくくするだけです。

利用可能なネットワークがない場合、どのようにシステムをテストしていますか?エミュレータではこれを行うことはできません。実際のデバイスでは、電話を飛行機モードにする必要があります。ネットワークをオフにするだけでは不十分です。

また、私はこのメソッドを使ってネットワークの状態を返し、何か他のもの(呼び出し元)が通知を処理させることを検討します。この方法で、UIに縛らずに確認する必要がある場所であればどこでも再利用できます。

最後に、ユーザーをリダイレクトする場合は、ナビゲートを使用しないことです。これはまだバックスタックを拡大させ続けるつもりです。利用可能なネットワークがない場合は、NavigationService.GoBack()を使用して、効果的に前のページに戻ります(戻るボタンを押すと同様です)。

+0

飛行機モードをオンにしてLumia 800でテストしています。 –

+0

テスト中にデバイスをコンピュータから切断しますか? GetIsNetworkAvailable()呼び出しが、デバイスがPCに接続されていることをtrueに戻す可能性があります。 –

+0

Zuneに接続している場合、GetIsNetworkAvailable()がtrueを返します。 –

関連する問題