c#判斷網卡是否可用
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; }
}
}
}
本文由用戶 UBOMerri 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!