我正在开发一个简单的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#,所以有一些我不知道的异常处理事项吗?
由于
答案 0 :(得分:1)
如果没有看到你的其他代码,我就无法告诉它为什么会崩溃所以可能有很多原因与网络访问无关。
对GetIsNetworkAvailable的调用是正确的,但它周围的代码有点令人困惑(使用负值然后比较然后返回值)。许多负面比较只会使代码的可读性降低。
如果没有可用的网络,您如何测试系统?在模拟器上你不能这样做。在真实设备上,您必须将手机置于飞行模式。仅仅关闭网络是不够的。
另外我会考虑让这个方法什么也不做,只是返回网络的状态,让其他东西(调用者)处理通知。通过这种方式,您可以在需要检查的任何地方重复使用它,而无需将自己绑定到UI。
如果要重定向用户,最后一件事就是不使用Navigate。这仍然会使后端堆积增长。如果没有可用的网络,最好使用NavigationService.GoBack(),它可以有效地将用户返回到上一页(就像他们点击后退按钮一样)。