为了进行互联网检查,我编写了以下代码。
bool isAvailable = NetworkInterface.GetIsNetworkAvailable();
if (isAvailable == true)
{
}
如果网络不可用,上述代码将始终返回true。请告诉我如何检查互联网连接?
为了进行互联网检查,我编写了以下代码。
bool isAvailable = NetworkInterface.GetIsNetworkAvailable();
if (isAvailable == true)
{
}
如果网络不可用,上述代码将始终返回true。请告诉我如何检查互联网连接?
return (Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType
!= Microsoft.Phone.Net.NetworkInformation.NetworkInterfaceType.None);
您也可以尝试,
bool isAvailable = Microsoft.Phone.Net.NetworkInformation.DeviceNetworkInformation.IsNetworkAvailable;
Always check this in a thread, it takes some time
internal static bool IsNetworkAvailable()
{
bool _bhasNetworkConnection = false;
try
{
_bhasNetworkConnection = (NetworkInterface.NetworkInterfaceType != NetworkInterfaceType.None);
}
catch
{
_bhasNetworkConnection = false;
}
return _bhasNetworkConnection;
}
在UI线程中检查 NetworkInterface.NetworkInterfaceType
是“危险的”,因为它是一个阻塞调用!可能需要长达20秒才能完成...
使用以下方法进行非阻塞调用:
public static void IsConnected(Action<bool> completed)
{
ThreadPool.QueueUserWorkItem(o =>
{
var type = NetworkInterface.NetworkInterfaceType;
completed(type != NetworkInterfaceType.None);
});
}
请查看https://xp-dev.com/svn/mytoolkit/MyToolkit.Wp8/Networking/NetworkState.cs(来自我的项目页面)
如果您想在completed
操作中更改UI,则必须在UI线程中运行逻辑。例如:
NetworkState.IsConnected(connected => {
if (connected)
{
Deployment.Current.Dispatcher.BeginInvoke(delegate {
// TODO add your UI logic
});
}
});
NetworkStateTracker
:
https://xp-dev.com/svn/mytoolkit/MyToolkit.Wp8/Networking/NetworkStateTracker.cs