C # NetworkAvailabilitychangedEvent - PullRequest
       14

C # NetworkAvailabilitychangedEvent

0 голосов
/ 29 апреля 2009

VS 2008

Я занимаюсь разработкой приложения, которое должно определять наличие подключения клиента к сети. т.е. кабель локальной сети подключен или беспроводной включен. Я использовал код ниже.

Я использую событие NetworkAvailabilitychangedEvent, чтобы инициировать событие, когда беспроводное соединение отключено или кабель был отключен. Однако это работает только в том случае, если у пользователя имеется только 3 подключения (LAN, Wireless и loopbacks).

Microsoft: «Сеть доступна, когда хотя бы один сетевой интерфейс помечен как« вверх »и не является туннельным или петлевым интерфейсом».

Однако у некоторых клиентов более 3 подключений. У одного клиента было соединение Bluetooth, а у другого - несколько соединений VMWare. На этих клиентах не удалось запустить событие.

Могу ли я в любом случае игнорировать все эти соединения, которые я не заинтересован в прослушивании, и просто слушать в локальной сети и по беспроводной сети?

Большое спасибо за любой совет,

private void Form1_Load(object sender, EventArgs e)
    {
        NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(OnNetworkChangedEvent);  
    }

    private void OnNetworkChangedEvent(object sender, NetworkAvailabilityEventArgs e)
    {
        bool available = e.IsAvailable;

        NetworkInterface[] networkConnections = NetworkInterface.GetAllNetworkInterfaces();

        foreach (NetworkInterface ni in networkConnections)
        {
            if (ni.Name == "Local Area Connection")
            {
                if (ni.OperationalStatus == OperationalStatus.Down)
                {
                    Console.WriteLine("LAN disconnected: " + ni.Description);
                }
            }
            else if (ni.Name == "Wireless Network Connection")
            {
                if (ni.OperationalStatus == OperationalStatus.Down)
                {
                    Console.WriteLine("Wireless disconnected: " + ni.Description);
                }
            }
        }
    }

1 Ответ

0 голосов
/ 29 апреля 2009

Возможно, вам нужно реализовать какой-то агент опроса, который работает в отдельном потоке и регулярно пытается связаться с чем-то, слушающим на удаленном сервере (или серверах?).

При сбое (или, возможно, при неудачном заданном количестве попыток подключения) запускается событие. То же самое, когда он выходит из состояния сбоя.

Ваше приложение подпишется на эти события и примет соответствующие меры.

Конечно, это может не подходить для вашего сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...