[C#] 判断网卡是否可用 →→→→→进入此内容的聊天室

来自 , 2020-12-23, 写在 C#, 查看 142 次.
URL http://www.code666.cn/view/a18aa23e
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net.NetworkInformation;
  6. using System.Threading;
  7.  
  8. namespace NetworkAdapterTestEvent
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             NetworkAdapterAvailable newtest = new NetworkAdapterAvailable();
  15.  
  16.             newtest.Subscribe("本地连接",new NetworkAdapterAvailable.NetworkAdapterChangedEventHandler(NetowrkAdapter_changed));
  17.             newtest.StartMonitor();
  18.  
  19.             Console.ReadLine();
  20.             newtest.StopMonitor();
  21.             newtest.Unsubscribe("本地连接", new NetworkAdapterAvailable.NetworkAdapterChangedEventHandler(NetowrkAdapter_changed));
  22.         }
  23.  
  24.         static void NetowrkAdapter_changed(object sender, NetworkAdapterChangedArgument e)
  25.         {
  26.             Console.WriteLine("Name:{0}\tStatus:{1}", e.AdapterName, e.AdapterStatus.ToString());
  27.         }
  28.     }
  29.  
  30.     public class NetworkAdapterAvailable
  31.     {
  32.         public delegate void NetworkAdapterChangedEventHandler(object send , NetworkAdapterChangedArgument e);
  33.        
  34.         public event NetworkAdapterChangedEventHandler NetworkAdapterChanged;
  35.  
  36.         private Thread _AdapterCheckThread;
  37.         private string _AdapterName;
  38.         private bool _Stop = false;
  39.         private NetworkInterface[] _adapters;
  40.  
  41.         public NetworkAdapterAvailable()
  42.         {
  43.             _adapters = NetworkInterface.GetAllNetworkInterfaces();
  44.         }
  45.  
  46.         /// <summary>
  47.         /// 订阅
  48.         /// </summary>
  49.         /// <param name="_adaptername_"></param>
  50.         /// <param name="_EventHandler_"></param>
  51.         public void Subscribe(string _adaptername_ , NetworkAdapterChangedEventHandler _EventHandler_)
  52.         {
  53.             _AdapterName = _adaptername_;
  54.  
  55.             if (_EventHandler_ != null)
  56.             {
  57.                 NetworkAdapterChanged += _EventHandler_;
  58.             }
  59.         }
  60.  
  61.         /// <summary>
  62.         /// 取消订阅
  63.         /// </summary>
  64.         /// <param name="_adaptername_"></param>
  65.         /// <param name="_EventHandler_"></param>
  66.         public void Unsubscribe(string _adaptername_, NetworkAdapterChangedEventHandler _EventHandler_)
  67.         {
  68.             if (_EventHandler_ != null)
  69.             {
  70.                 NetworkAdapterChanged -= _EventHandler_;
  71.             }
  72.         }
  73.  
  74.         /// <summary>
  75.         /// 开始监控
  76.         /// </summary>
  77.         public void StartMonitor()
  78.         {
  79.             _AdapterCheckThread = new Thread(new ThreadStart(AdapterCheckHandler));
  80.             _AdapterCheckThread.IsBackground = true;
  81.             _AdapterCheckThread.Start();
  82.         }
  83.  
  84.         public void StopMonitor()
  85.         {
  86.             _Stop = true;
  87.  
  88.             if (_AdapterCheckThread != null)
  89.             {
  90.                 _AdapterCheckThread.Join();
  91.             }
  92.  
  93.         }
  94.  
  95.         private void AdapterCheckHandler()
  96.         {
  97.             while (!_Stop)
  98.             {
  99.                 NetworkInterface[] __adapters = NetworkInterface.GetAllNetworkInterfaces();
  100.  
  101.                 for (int i = 0; i < __adapters.Length; i++)
  102.                 {
  103.                     if (_adapters[i].Name == _AdapterName)
  104.                     {
  105.                         if (_adapters[i].OperationalStatus != __adapters[i].OperationalStatus)
  106.                         {
  107.                             NetworkAdapterChanged(this, new NetworkAdapterChangedArgument(_AdapterName, __adapters[i].OperationalStatus));
  108.                             _adapters[i] = __adapters[i];
  109.                         }
  110.                     }
  111.                 }
  112.  
  113.                 Thread.Sleep(100);
  114.             }
  115.         }
  116.     }
  117.  
  118.     public class NetworkAdapterChangedArgument : EventArgs
  119.     {
  120.         private string _AdapterName;
  121.         private OperationalStatus _AdapterStatus;
  122.  
  123.         public NetworkAdapterChangedArgument(string _adaptername_, OperationalStatus _adapterstatus_)
  124.         {
  125.             _AdapterName = _adaptername_;
  126.             _AdapterStatus = _adapterstatus_;
  127.         }
  128.  
  129.         public string AdapterName
  130.         {
  131.             get { return _AdapterName; }
  132.         }
  133.  
  134.         public OperationalStatus AdapterStatus
  135.         {
  136.             get { return _AdapterStatus; }
  137.         }
  138.     }
  139. }
  140.  
  141. //csharp/1132

回复 "判断网卡是否可用"

这儿你可以回复上面这条便签

captcha