在没有网络连接时阻止WP7应用程序崩溃

时间:2012-03-17 20:28:36

标签: c# windows-phone-7 exception-handling

我正在开发一个简单的WP7应用程序,它可以显示实时XML Feed中的BART到达次数。我有那部分工作,但我需要解决这个问题,因此它将被认证为市场。

当我在飞机模式下调试我的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#,所以有一些我不知道的异常处理事项吗?

由于

1 个答案:

答案 0 :(得分:1)

如果没有看到你的其他代码,我就无法告诉它为什么会崩溃所以可能有很多原因与网络访问无关。

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

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

另外我会考虑让这个方法什么也不做,只是返回网络的状态,让其他东西(调用者)处理通知。通过这种方式,您可以在需要检查的任何地方重复使用它,而无需将自己绑定到UI。

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