- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net.NetworkInformation;
- using System.Threading;
- namespace NetworkAdapterTestEvent
- {
- class Program
- {
- static void Main(string[] args)
- {
- NetworkAdapterAvailable newtest = new NetworkAdapterAvailable();
- newtest.Subscribe("本地连接",new NetworkAdapterAvailable.NetworkAdapterChangedEventHandler(NetowrkAdapter_changed));
- newtest.StartMonitor();
- Console.ReadLine();
- newtest.StopMonitor();
- newtest.Unsubscribe("本地连接", new NetworkAdapterAvailable.NetworkAdapterChangedEventHandler(NetowrkAdapter_changed));
- }
- static void NetowrkAdapter_changed(object sender, NetworkAdapterChangedArgument e)
- {
- Console.WriteLine("Name:{0}\\tStatus:{1}", e.AdapterName, e.AdapterStatus.ToString());
- }
- }
- public class NetworkAdapterAvailable
- {
- public delegate void NetworkAdapterChangedEventHandler(object send , NetworkAdapterChangedArgument e);
- public event NetworkAdapterChangedEventHandler NetworkAdapterChanged;
- private Thread _AdapterCheckThread;
- private string _AdapterName;
- private bool _Stop = false;
- private NetworkInterface[] _adapters;
- public NetworkAdapterAvailable()
- {
- _adapters = NetworkInterface.GetAllNetworkInterfaces();
- }
- /// <summary>
- /// 订阅
- /// </summary>
- /// <param name="_adaptername_"></param>
- /// <param name="_EventHandler_"></param>
- public void Subscribe(string _adaptername_ , NetworkAdapterChangedEventHandler _EventHandler_)
- {
- _AdapterName = _adaptername_;
- if (_EventHandler_ != null)
- {
- NetworkAdapterChanged += _EventHandler_;
- }
- }
- /// <summary>
- /// 取消订阅
- /// </summary>
- /// <param name="_adaptername_"></param>
- /// <param name="_EventHandler_"></param>
- public void Unsubscribe(string _adaptername_, NetworkAdapterChangedEventHandler _EventHandler_)
- {
- if (_EventHandler_ != null)
- {
- NetworkAdapterChanged -= _EventHandler_;
- }
- }
- /// <summary>
- /// 开始监控
- /// </summary>
- public void StartMonitor()
- {
- _AdapterCheckThread = new Thread(new ThreadStart(AdapterCheckHandler));
- _AdapterCheckThread.IsBackground = true;
- _AdapterCheckThread.Start();
- }
- public void StopMonitor()
- {
- _Stop = true;
- if (_AdapterCheckThread != null)
- {
- _AdapterCheckThread.Join();
- }
- }
- private void AdapterCheckHandler()
- {
- while (!_Stop)
- {
- NetworkInterface[] __adapters = NetworkInterface.GetAllNetworkInterfaces();
- for (int i = 0; i < __adapters.Length; i++)
- {
- if (_adapters[i].Name == _AdapterName)
- {
- if (_adapters[i].OperationalStatus != __adapters[i].OperationalStatus)
- {
- NetworkAdapterChanged(this, new NetworkAdapterChangedArgument(_AdapterName, __adapters[i].OperationalStatus));
- _adapters[i] = __adapters[i];
- }
- }
- }
- Thread.Sleep(100);
- }
- }
- }
- public class NetworkAdapterChangedArgument : EventArgs
- {
- private string _AdapterName;
- private OperationalStatus _AdapterStatus;
- public NetworkAdapterChangedArgument(string _adaptername_, OperationalStatus _adapterstatus_)
- {
- _AdapterName = _adaptername_;
- _AdapterStatus = _adapterstatus_;
- }
- public string AdapterName
- {
- get { return _AdapterName; }
- }
- public OperationalStatus AdapterStatus
- {
- get { return _AdapterStatus; }
- }
- }
- }
来源: http://www.phpxs.com/code/1004627/