为什么GetIsNetworkAvailable()总是返回true?

Rod*_*des 14 c# windows networking

我有这个方法:

public static void testConnection()
    {
        if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
        {
            System.Windows.MessageBox.Show("This computer is connected to the internet");
        }
        else
        {
            System.Windows.MessageBox.Show("This computer is not connected to the internet");
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想它会告诉我连接是否可用但它总是返回true(并打印第一条消息),即使我确定没有连接.我做错了什么?

PS:我还在学习C#.

ven*_*ra8 16

我认为这种方法更合适:

   public static bool getIsInternetAccessAvailable()
    {
        switch(NetworkInformation.GetInternetConnectionProfile().GetNetworkConnectivityLevel())
        {
            case NetworkConnectivityLevel.InternetAccess:
                return true;
            default:
                return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 什么是using指令?我找不到GetInternetConnectionProfile方法. (2认同)
  • 此技术似乎仅适用于通用 Windows 平台 (UWP) 项目。我尝试在桌面 WPF 项目中搜索命名空间,但没有成功。 (2认同)

Cla*_*wer 12

如果我错了,请纠正我,但据我所知,您正在使用的方法是检查网络连接,而不一定是互联网连接.我会假设如果你在任何类型的网络上,无论互联网是否可用,这都将返回真实状态?看到这个.

我注意到检查互联网连接的一种方法如下:

private bool IsInternetAvailable()
{
    try
    {
        Dns.GetHostEntry("www.google.com"); //using System.Net;
        return true;
    } catch (SocketException ex) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以在以下帖子中找到(在VB.Net中通过阅读Joacim Andersson [MVP]的评论).

注意:最新的编辑是由AceInfinity建议的,但在社区审查中被拒绝.我的名声太低,无法覆盖这一点,所以我自己做了改变.