2012-03-17 40 views
0

我正在研究一个简单的WP7应用程序,它显示来自其实时XML馈送的BART到达。我有这部分工作,但我需要解决这个问题,所以它会被认证为市场。当没有网络连接时停止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 2012-03-17 20:50:30

回答

1

没有看到你的代码的其余部分我不知道为什么它的崩溃,从而有可能是一个很大的什么都没有做网络接入的原因。

对GetIsNetworkAvailable的调用是正确的,但其周围的代码有点令人困惑(使用负值然后比较返回值)。许多负面比较只会使代码不易读。

如果没有网络可用,您如何测试系统?在模拟器上,你不能这样做。在真实的设备上,您必须将手机置于飞行模式。只关掉网络是不够的。

而且我认为有这个方法做什么,但返回的网络状态,并让其他的东西(主叫)处理通知。通过这种方式,您可以在需要检查的任何位置重新使用它,而无需将自己绑定到UI。

最后一件事是不使用导航如果你想重定向用户。这仍然会保持后台的增长。如果没有可用的网络,最好使用NavigationService.GoBack(),它有效地将用户返回到上一页(就像他们点击后退按钮一样)。

+0

我正在Lumia 800上打开飞机模式进行测试。 – 2012-03-17 21:03:33

+0

在测试过程中,您是否将设备与电脑断开连接?我相信GetIsNetworkAvailable()调用可能会返回在设备的真正连接到PC – 2012-03-18 10:17:44

+0

GetIsNetworkAvailable()如果你连接到Zune播放器将返回true! – 2012-03-18 11:13:46

相关问题