3

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

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

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

我用一个真实的设备(不是只用模拟器)检查了所有这些,并努力寻找哪种方式是检查设备互联网可用性的最佳方式。

任何建议都非常感谢......谢谢提前......

4

4 回答 4

1

知道网络可用并连接到更广泛的 Internet 之间是有区别的。NetworkInterface.GetIsNetworkAvailable()非常快,如果网络接口被禁用,将返回 false。

如果它返回网络可用,则仅表示您可以连接 - DNS 查找速度、蜂窝网络连接(如果没有 WiFi 连接)和设备不可用仍然存在潜在问题已经连接等

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

于 2012-06-01T12:27:32.000 回答
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;

        }
    }
于 2012-08-03T09:36:42.793 回答
0

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

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

于 2012-06-02T22:06:04.087 回答
0

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

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 秒的超时时间,以防万一

于 2015-05-12T07:53:09.637 回答