web-dev-qa-db-fra.com

J'ai besoin d'un événement pour détecter la connexion/déconnexion Internet

Nous développons actuellement une application .NET dont l’une des exigences est de contrôler si le système est connecté à Internet ou non. 

Nous avons pu obtenir un événement .NET pour "déconnexion de câble Ethernet", mais si le modem est réinitialisé, cet événement n'est pas déclenché. Je ne veux pas continuer à faire un ping sur une URL pour y parvenir, car cela alourdirait considérablement les performances. Existe-t-il un événement .NET permettant de vérifier si le système est connecté à Internet ou non?

Une icône dans la barre d'état système indique un signe en croix ou un signe de connectivité limitée lorsque le système n'est pas connecté à Internet. Cela donne à penser que Windows est au courant et je veux piéger cet événement.

25
Nuetrino

Tout cela est couvert (y compris la différence entre le fait d'être sur le réseau et le fait que le réseau vous connecte à Internet) sur http://msdn.Microsoft.com/en-us/library/ee264321(VS.85).aspx . J'espère que vous aviez l'intention de mettre cette balise Windows 7 sur votre message, car tout cela est plutôt nouveau. 

La clé est INetworkListManager.get_IsConnectedToInternet() qui fait à peu près ce qui est écrit sur l’étain. Vous devez vous déplacer un peu pour vous inscrire aux événements, etc. Le Code Pack encapsule une partie de cela pour vous et contient un exemple de réseau que vous pouvez adapter.

12
Kate Gregory

Vous pouvez utiliser la classe NetworkChange , avec l'événement NetworkAvailabilityChanged :

NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;

Puisqu'il s'agit d'un événement système, assurez-vous de le supprimer lorsque vous avez terminé, consultez ce message ici: Vous devez faire attention à l'utilisation du gestionnaire d'événements pour NetworkChange

22
Simon Mourier

J'ai pu résoudre ce problème dans une certaine mesure. J'ai pu trouver un exemple de code dans le projet Code http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=34650 . Merci à tous pour les réponses. 

en particulier le lien d'article qui a été posté par mr gregory m'a beaucoup aidé.

3
Nuetrino

Cela a fonctionné pour moi!

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

        }
    }
}
1
Sandeep Ks

essayez avec ceci:

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
user3047352