web-dev-qa-db-ja.com

インターネット接続/切断を検出するイベントが必要です

システムがインターネットに接続されているかどうかを監視することが要件の1つである.NETアプリケーションを開発しています。

「イーサネットケーブル切断」の.NETイベントを取得できましたが、モデムがリセットされた場合、このイベントはトリガーされません。かなりのパフォーマンスオーバーヘッドが追加されるため、これを実行するためにいくつかのURLにpingを送信し続けたくありません。システムがインターネットに接続されているかどうかを確認できる.NETイベントはありますか?

システムがインターネットに接続されていない場合、システムトレイにアイコンが表示され、クロスサインまたは接続制限サインが表示されます。これはWindowsが知っていることを示唆しており、そのイベントをトラップしたいと思います。

30
Nuetrino

これはすべて、ネットワーク上にあることと、ネットワークがインターネットに接続することの違いを含めて、 http://msdn.Microsoft.com/en-us/library/ee264321(VS.85)でカバーされています。 .aspx 。 Windows 7のタグを投稿に追加するつもりだったと思いますが、これはすべて新しいものです。

キーはINetworkListManager.get_IsConnectedToInternet()であり、これは缶に書かれていることのほとんどを行います。イベントなどに登録するには、少しジャンプする必要があります。 コードパック は、それらのいくつかをラップして、適応できるネットワークサンプルを持っています。

12
Kate Gregory

NetworkChange クラスをNetworkAvailabilityChangedイベントとともに使用できます。

NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;

これはシステムイベントであるため、終了したら必ずイベントを削除してください。この投稿を参照してください。 NetworkChangeのイベントハンドラーの使用には注意が必要です

22
Simon Mourier

この問題はある程度解決できました。コードプロジェクトでいくつかのサンプルコードを見つけることができました http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=3465 。返信ありがとうございます。

特にグレゴリー氏が投稿した記事のリンクは私を大いに助けてくれました。

3
Nuetrino

これは私のために働いた!

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

これで試してください:

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
Felipe Roche