Мне нужно событие, чтобы обнаружить подключение / отключение Интернета - PullRequest
28 голосов
/ 16 декабря 2010

Мы разрабатываем приложение .NET, одним из требований которого является мониторинг того, подключена ли система к Интернету или нет.

Нам удалось получить событие .NET для «отключения сетевого кабеля», но если модем перезагружен, это событие не запускается. Я не хочу продолжать пинговать некоторые URL, чтобы сделать это, так как это приведет к значительному снижению производительности. Есть ли какое-либо событие .NET, которое может проверить, подключена ли система к Интернету или нет?

В системном трее есть значок, который показывает крестик или знак ограниченного подключения, когда система не подключена к Интернету. Это говорит о том, что Windows знает, и я хочу перехватить это событие.

Ответы [ 6 ]

22 голосов
/ 16 декабря 2010

Вы можете использовать класс NetworkChange , с событием NetworkAvailabilityChanged :

NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;

Так как это системное событие, убедитесь, что вы удалили событие, когда закончите, смотрите этот пост здесь: Вы должны быть осторожны при использовании обработчика событий для NetworkChange

12 голосов
/ 16 декабря 2010

Это все покрыто (включая разницу между тем, чтобы быть в сети и сетью, соединяющей вас с Интернетом) на http://msdn.microsoft.com/en-us/library/ee264321(VS.85).aspx. Я надеюсь, что вы хотели поместить этот тег Windows 7 в свой пост, потому что все это довольно новый.

Ключ INetworkListManager.get_IsConnectedToInternet(), который делает то, что говорит на жестяной банке. Вам нужно немного попрыгать, чтобы зарегистрироваться на события и т. Д. Code Pack завершает некоторые из них для вас и имеет сетевой пример, который вы можете адаптировать.

3 голосов
/ 23 декабря 2010

Мне удалось решить эту проблему в некоторой степени. Мне удалось найти пример кода в проекте кода http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=34650. Спасибо всем за ответы.

особенно мне помогла ссылка на статью, которая была размещена г-ном Грегори.

1 голос
/ 04 августа 2017

Это сработало для меня!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.NetworkInformation;
namespace ConsoleApplication6
{


    class Program
    {
        private void AvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
        {

            if (e.IsAvailable)
                Console.WriteLine("Network connected!");
            else
                Console.WriteLine("Network dis connected!");
        }
        public void Form1()
        {

            NetworkChange.NetworkAvailabilityChanged += AvailabilityChanged;
        }

        static void Main(string[] args)
        {
            Program p = new Program();

            p.Form1();

            Console.ReadLine();

        }
    }
}
0 голосов
/ 22 декабря 2017

попробуйте с этим:

private void AvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
        {
            if (e.IsAvailable)
                Console.WriteLine("Wi-Fi conectado " + DateTime.Now );
            else
                Console.WriteLine("Wi-Fi desconectado " + DateTime.Now);
        }


        public Inicio()
        {
            InitializeComponent();

            NetworkAvailabilityChangedEventHandler myHandler = new NetworkAvailabilityChangedEventHandler(AvailabilityChanged);
            NetworkChange.NetworkAvailabilityChanged += myHandler;
        }
0 голосов
/ 16 декабря 2010

вы должны использовать WMI.

Это пример обнаружения отключения: (для проверки создайте файл .vbs и запустите его)

 strComputer = "."

  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")
  Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("Select * from MSNdis_StatusMediaDisconnect") 

  Do While True 
    Set strLatestEvent = colMonitoredEvents.NextEvent 
    Wscript.StdOut.Write "A network connection has been lost: " 
    Wscript.StdOut.Writeline strLatestEvent.InstanceName
  Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...