システムがインターネットに接続されているかどうかを監視することが要件の1つである.NETアプリケーションを開発しています。
「イーサネットケーブル切断」の.NETイベントを取得できましたが、モデムがリセットされた場合、このイベントはトリガーされません。かなりのパフォーマンスオーバーヘッドが追加されるため、これを実行するためにいくつかのURLにpingを送信し続けたくありません。システムがインターネットに接続されているかどうかを確認できる.NETイベントはありますか?
システムがインターネットに接続されていない場合、システムトレイにアイコンが表示され、クロスサインまたは接続制限サインが表示されます。これはWindowsが知っていることを示唆しており、そのイベントをトラップしたいと思います。
これはすべて、ネットワーク上にあることと、ネットワークがインターネットに接続することの違いを含めて、 http://msdn.Microsoft.com/en-us/library/ee264321(VS.85)でカバーされています。 .aspx 。 Windows 7のタグを投稿に追加するつもりだったと思いますが、これはすべて新しいものです。
キーはINetworkListManager.get_IsConnectedToInternet()
であり、これは缶に書かれていることのほとんどを行います。イベントなどに登録するには、少しジャンプする必要があります。 コードパック は、それらのいくつかをラップして、適応できるネットワークサンプルを持っています。
NetworkChange クラスをNetworkAvailabilityChangedイベントとともに使用できます。
NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;
これはシステムイベントであるため、終了したら必ずイベントを削除してください。この投稿を参照してください。 NetworkChangeのイベントハンドラーの使用には注意が必要です
この問題はある程度解決できました。コードプロジェクトでいくつかのサンプルコードを見つけることができました http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=3465 。返信ありがとうございます。
特にグレゴリー氏が投稿した記事のリンクは私を大いに助けてくれました。
これは私のために働いた!
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();
}
}
}
これで試してください:
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;
}