我的应用程序WP7未被接受,因为如果互联网不可用,它将无法加载。我寻找了一种方法来检查它,并找到了这个命令
NetworkInterface.GetIsNetworkAvailable()
但它在模拟器上不起作用,我也没有任何设备来测试它。谁能告诉我,如果设备处于飞行模式,是否返回false?如果不是,我如何检查它?
谢谢,奥斯卡
编辑:我也尝试过这段代码:
try
{
wsClient.CurrenciesCompleted += new EventHandler<CurrencyConversion.CurrenciesCompletedEventArgs>(wsClient_CurrenciesCompleted);
wsClient.CurrenciesAsync(null);
}
catch
{
NetworkNotAvailable();
}但是我没能捕捉到异常,我在wsClient_CurrenciesCompleted方法里也试过了,但也不好。
我可以在哪里测试它?
发布于 2010-12-07 23:40:07
不要测试“一般的互联网”--测试你实际要连接的服务。通过尝试连接它来测试它-在启动时发出一些简单的、非破坏性的请求。是的,这将占用用户数据容许量的一小部分,但是:
发布于 2010-12-08 02:27:52
Jon建议的另一种方法是检查哪个网络接口可用。在需要根据网络速度调整调用哪个服务的情况下,这非常方便。例如,可以修改下面的switch语句,以返回一个Enum来表示网络的质量。
public class NetworkMonitorClass
{
private Timer timer;
private NetworkInterfaceType _currNetType = null;
private volatile bool _valueRetrieved = false;
public NetworkMonitorClass()
{
//using a timer to poll the network type.
timer = new Timer(new TimerCallBack((o)=>
{
//Copied comment from Microsoft Example:
// Checking the network type is not instantaneous
// so it is advised to always do it on a background thread.
_currNetType = Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType;
_valueRetrieved = true;
}), null, 200, 3000); // update the network type every 3 seconds.
}
public NetworkInterfaceType CurrentNetworkType
{
get
{
if(false == _valueRetrieved ) return NetworkInterfaceType.Unknown;
return _currNetType;
}
private set { ;}
}
public bool isNetworkReady()
{
if(false == _valueRetrieved ) return false;
switch (_currentNetworkType)
{
//Low speed networks
case NetworkInterfaceType.MobileBroadbandCdma:
case NetworkInterfaceType.MobileBroadbandGsm:
return true;
//High speed networks
case NetworkInterfaceType.Wireless80211:
case NetworkInterfaceType.Ethernet:
return true;
//No Network
case NetworkInterfaceType.None:
default:
return false;
}
}
}请参阅http://msdn.microsoft.com/en-us/library/microsoft.phone.net.networkinformation.networkinterface.networkinterfacetype(VS.92).aspx
发布于 2010-12-08 00:11:57
在模拟器中,GetIsNetworkAvailable()将始终返回true。为了在模拟器中进行测试,您需要在代码中解决这个问题。
这可能是一个有用的快速检查,但您也(正如Jon指出的)需要处理无法连接到特定服务器的情况。
当您尝试在回调中获取响应时,可以通过捕获WebException来处理此问题。
private static void DownloadInfoCallback(IAsyncResult asynchronousResult)
{
try
{
var webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
// This will cause an error if the request failed
var webResponse = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
.....
}
catch (WebException exc)
{
// Handle error here
}
}https://stackoverflow.com/questions/4378456
复制相似问题