Подтвердить что ты не робот

Мне нужно событие для обнаружения подключения к Интернету/отключения

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;

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

Ответ 3

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

особенно ссылка на статью, которую опубликовал mr gregory, мне очень помогла.

Ответ 4

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

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();

        }
    }
}

Ответ 5

вам нужно использовать 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

Ответ 6

попробуйте следующее:

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;
        }