Windows phone7:检查Internet连接可用性

时间:2012-06-01 08:51:01

标签: c# windows-phone-7 windows-phone-7.1

在windows phone7中,我只需要在继续下一组操作之前检查互联网连接是否可用。我搜索并找到了许多POSTS中建议的3个选项。它们如下。

(a). bool isNetworkAvailable = NetworkInterface.GetIsNetworkAvailable();
(b). bool isNetworkAvailable = DeviceNetworkInformation.IsNetworkAvailable;
(c). bool isNetworkAvailable = (NetworkInterface.NetworkInterfaceType != NetworkInterfaceType.None);

在(a)和(b)选项中,即使WIFI为OFF并且没有可用的互联网连接,它也会提供TRUE作为结果。 但是(c)提供互联网不可用时的确切(实际)结果。但需要这么多时间才能做出回应。在那之前,应用程序被卡住......

我使用真实设备检查了所有这些设备(仅限于模拟器),并且努力以哪种方式检查设备的互联网可用性。

任何建议都受到高度赞赏......感谢inadvance .....

4 个答案:

答案 0 :(得分:1)

知道网络可用并连接到更广泛的互联网之间存在差异。 NetworkInterface.GetIsNetworkAvailable()非常快,如果禁用网络接口,则返回false。

如果它返回网络可用,它只表示您可以连接 - 仍然存在DNS查找速度,蜂窝网络连接(如果没有WiFi连接)以及设备尚未连接等

如果导致性能问题,您应该考虑将网络访问权限移出UI线程。

答案 1 :(得分:1)

我们在这里使用它。我的项目中有相同的概念,我做了以下工作。希望它有所帮助。

  public bool netWorkAvailable()
    {
        if (NetworkInterface.GetIsNetworkAvailable())
        {
            Logger.log(TAG, "netWorkAvailable()");
            return true;
        }
        return false;
    }

 if (netWorkAvailable())
   {
     buffer.Append(SERVER_URL);
     buffer.Append("_req=").Append(8);
     httpConnection = new HttpConnection();
     httpConnection.connect(REQ_REGISTRATION, buffer.ToString(), listener, null);
     httpConnection.Post();
    }

我有不同的类来处理所有的httpconnection。 除了这些,我还为项目目的检查了一些其他的东西,它们如下:

public bool IsWifiAvailable()
    {
     if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211))
         {
          return true;
         }
     else
       {
        return false;
       }
    }

    public bool threeGkAvailable()
    {
        if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandCdma)
                  || (NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandGsm))
        {
            return true;
        }
        else
        {
            return false;

        }
    }

答案 2 :(得分:0)

也许您可能想尝试将HttpWebRequest发送到已知网页,并检查响应中的前几个字符是否与预期结果匹配。您可能还需要多次遍历此检查功能,直到连接测试实际获得结果(无论是成功还是失败)。

将此加载到与UI线程分离的线程上,然后开始使用。一定要捕获任何异常(如果测试由于缺乏连接或其他问题而无法解决)。我实际上在我的一个Windows Phone 7应用程序中使用过这个,但我不确定它是否是最好的想法。

答案 3 :(得分:0)

您可以通过使用webclient请求网页来检查用户是否已连接到互联网。

WebClient client = new WebClient();
        client.DownloadStringCompleted += (s, e) =>
        {
            if (e.Error == null && !e.Cancelled)
            {
                //completed.TrySetResult(true);
                MessageBox.Show("Internet Connected", "True", MessageBoxButton.OK);
            }
            else
            {
                //completed.TrySetResult(false);
                MessageBox.Show("Internet Not Connected", "False", MessageBoxButton.OK);
            }
        };
        client.DownloadStringAsync(new Uri("http://www.google.com/"));

如果非常

,您也可以设置20秒的时间段