【问题标题】:Stopping WP7 app from crashing when there is no network connection在没有网络连接时阻止 WP7 应用程序崩溃
【发布时间】:2012-03-18 04:54:36
【问题描述】:

我正在开发一个简单的 WP7 应用程序,该应用程序显示来自实时 XML 提要的 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#,所以我缺少一些异常处理的东西吗?

谢谢

【问题讨论】:

  • 将您的代码放入 try catch 块中。

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


【解决方案1】:

没有看到您的其余代码,我无法判断它为什么会崩溃,因此可能有很多与网络访问无关的原因。

对 GetIsNetworkAvailable 的调用是正确的,但它周围的代码有点混乱(使用负值然后比较然后返回值)。大量的负面比较只会使代码的可读性降低。

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

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

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

【讨论】:

  • 我在 Lumia 800 上测试它并开启了飞行模式。
  • 您在测试期间是否断开设备与计算机的连接?我相信 GetIsNetworkAvailable() 调用可能会返回设备连接到电脑的 true
  • 如果您连接到 Zune,GetIsNetworkAvailable() 将返回 true!
  • 谢谢,NavigationService.GoBack() 并清理代码以减少负数的数量有助于使其运行。
猜你喜欢
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多