前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#判断网卡是否可用

C#判断网卡是否可用

原创
作者头像
用户7999227
修改2021-11-02 14:41:13
1.1K0
修改2021-11-02 14:41:13
举报
文章被收录于专栏:Java小王子

微软提供的函数不能再多网卡的情况下,判断指定网卡的网线连接状态。以下代码刚好能够解决这个问题。

代码语言:javascript
复制
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; }
    }
}

}
</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档