我需要一个事件来检测Internet连接/断开连接

我们正在开发一个.NET应用程序,其中一个要求是监视系统是否连接到互联网。

我们可以得到一个.NET事件“以太网电缆断开”,但是如果调制解调器被重置,那么这个事件不会被触发。 我不想继续ping一些URL来完成这个任务,因为这会增加相当大的性能开销。 有没有.NET事件可以检查系统是否连接到互联网?

系统托盘中有一个图标,表示系统未与互联网连接时出现交叉符号或有限的连接标志。 这表明Windows知道,我想要捕捉这个事件。

这一切都涵盖了(包括在networking和networking连接到互联网之间的区别)在http://msdn.microsoft.com/en-us/library/ee264321(VS.85).aspx 。 我希望你的意思是把你的post上的Windows 7标签,因为这是非常新的。

关键是INetworkListManager.get_IsConnectedToInternet() ,它几乎所做的就是说。 你不得不跳过一些注册的事件等Code Pack包装一些为你,并有一个networking样本,你可以适应。

NetworkAvailabilityChanged事件可以使用NetworkChange类:

 NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler; 

由于这是一个系统事件,请确保在完成时删除事件,请在此处查看此帖: 您需要小心使用NetworkChange的事件处理程序

我能够在一定程度上解决这个问题。 我可以在代码项目http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=34650find一些示例代码。; 感谢所有的答复。

特别是格雷戈里先生发表的文章链接帮了我很大的忙。

这对我有用!

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

你必须使用WMI。

这是断开检测的例子:(testing它创build一个.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