如何在Windows Phone 7上检查互联网连接是否可用?

3

为了进行互联网检查,我编写了以下代码。

bool isAvailable = NetworkInterface.GetIsNetworkAvailable();
             if (isAvailable == true)
             {
}

如果网络不可用,上述代码将始终返回true。请告诉我如何检查互联网连接?


你只在模拟器上测试过吗?如果是,请查看这里。 - benjer3
可能是重复的问题:WP7检查是否有可用的互联网 - ctacke
4个回答

2
检查 NetworkInterfaceType。如果互联网可用,则它应该不是 None
return (Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType 
!= Microsoft.Phone.Net.NetworkInformation.NetworkInterfaceType.None);

参考答案由vjsrinath提供:https://dev59.com/FF3Va4cB1Zd3GeqPENVs 希望这能帮到你。

1

您也可以尝试,

bool isAvailable = Microsoft.Phone.Net.NetworkInformation.DeviceNetworkInformation.IsNetworkAvailable;

1
以上方法在使用蜂窝数据连接时无法生效,只有在连接WiFi时才能正常工作。 - Thierry

0
     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;
    }

0

在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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接