我们正在开发一个.NET应用程序,其中一个要求是监视系统是否连接到Internet。
我们能够获得“以太网电缆断开”的.NET事件,但如果重置调制解调器,则不会触发此事件。我不想继续ping一些URL来完成这项工作,因为它会增加相当大的性能开销。是否有任何.NET事件可以检查系统是否连接到互联网?
系统托盘中有一个图标,当系统未连接到互联网时,会显示交叉标志或有限的连接标志。这表明Windows知道,我想捕获该事件。
答案 0 :(得分:22)
您可以使用NetworkChange类, NetworkAvailabilityChanged 事件:
NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;
由于这是一个系统事件,请确保在完成后删除该事件,请在此处查看此帖:You need to be careful about using event handler for NetworkChange
答案 1 :(得分:12)
http://msdn.microsoft.com/en-us/library/ee264321(VS.85).aspx全面覆盖(包括网络连接和网络连接到Internet之间的区别)。我希望你的意思是把Windows 7标签放在你的帖子上,因为这一切都很新。
关键是INetworkListManager.get_IsConnectedToInternet()
,它几乎与锡上所说的相同。你必须跳了一下才能注册事件等。Code Pack为你提供了一些内容,并有一个你可以适应的网络样本。
答案 2 :(得分:3)
我能够在一定程度上解决这个问题。我能够在Code项目中找到一些示例代码 http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=34650。谢谢大家的回复。
尤其是格雷戈里先生发布的文章链接给了我很多帮助。
答案 3 :(得分:1)
这对我有用!
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();
}
}
}
答案 4 :(得分:0)
试试这个:
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;
}
答案 5 :(得分:-2)
你必须使用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