C#判断联网状态

方法一:使用InternetGetConnectedState方法

不推荐使用该API。

  方法体(C++):BOOLAPI InternetGetConnectedState( LPDWORD lpdwFlags, DWORD dwReserved );

  参数说明:

    lpdwFlags:指向接收连接描述的变量的指针。即使函数返回FALSE,此参数也可能返回有效标志。此参数可以是以下一个或多个值。

    

含义
INTERNET_CONNECTION_CONFIGURED
0x40
本地系统具有到Internet的有效连接,但当前可能连接或可能未连接。
INTERNET_CONNECTION_LAN
0x02
本地系统使用局域网连接到Internet。
INTERNET_CONNECTION_MODEM
0x01
本地系统使用调制解调器连接到Internet。
INTERNET_CONNECTION_MODEM_BUSY
0x08
不再使用。
INTERNET_CONNECTION_OFFLINE
0x20
本地系统处于离线模式。
INTERNET_CONNECTION_PROXY
0x04
本地系统使用代理服务器连接到Internet。
INTERNET_RAS_INSTALLED
0x10
本地系统已安装RAS。

    dwReserved:该参数是保留参数,必须为0。

    返回值:如果存在活动的调制解调器或LAN Internet连接,则返回TRUE;如果没有Internet连接,或者当前所有可能的Internet连接都不处于活动状态,则返回FALSE。

  代码示例:

 1 public static class Internet
 2     {
 3         [DllImport("winInet.dll")]
 4         private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);
 5 
 6         /// <summary>
 7         /// 返回网络状态
 8         /// </summary>
 9         public static bool Status
10         {
11             get
12             {
13                 Int32 dwFlag = new int();
14                 if (!InternetGetConnectedState(ref dwFlag, 0))
15                 {
16                     return false;
17                 }
18                 else
19                 {
20                     return true;
21                 }
22             }
23         }
24     }
View Code

方法二:使用nuget安装 WindowsAPICodePack-Core 包,代码示例如下:

 1 public class NetworkHelper
 2     {
 3         /// <summary>
 4         /// 判断是否联网
 5         /// </summary>
 6         /// <param name="networkName">网络名称</param>
 7         /// <returns></returns>
 8         public static bool IsConnectNetwork(string networkName)
 9         {
10             bool isConnection = false;
11             NetworkCollection nCollection = NetworkListManager.GetNetworks(NetworkConnectivityLevels.All);
12             if (nCollection != null && nCollection.Count() > 0)
13             {
14                 if (string.IsNullOrEmpty(networkName))
15                 {
16                     isConnection = nCollection.Any(t => t.IsConnected);
17                 }
18                 else
19                 {
20                     isConnection = nCollection.Any(t => t.IsConnected && t.Name.Equals(networkName, StringComparison.InvariantCultureIgnoreCase));
21                 }
22                 isConnection = string.IsNullOrEmpty(networkName) ? nCollection.Any(t => t.IsConnected) :
23                     nCollection.Any(t => t.IsConnected && t.Name.Equals(networkName, StringComparison.InvariantCultureIgnoreCase));
24             }
25             return isConnection;
26         }
27     }
View Code
原文地址:https://www.cnblogs.com/lxfl2/p/12567350.html