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

问题描述 投票:28回答:6

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

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

系统托盘中有一个图标,当系统未连接到互联网时,该图标显示交叉标志或有限连接标志。这表明Windows知道,我想陷阱那个事件。

c# .net events windows-7
6个回答
12
投票

http://msdn.microsoft.com/en-us/library/ee264321(VS.85).aspx上,这些都包括在内(包括在网络上和让网络连接到互联网之间的区别)。我希望你的意思是把Windows 7标签放在你的帖子上,因为这一切都很新。

关键是INetworkListManager.get_IsConnectedToInternet(),它几乎就像锡上所说的那样。你必须跳过一点来注册事件等.Code Pack为你包装了一些,并有一个你可以适应的网络样本。


22
投票

您可以将NetworkChange类与NetworkAvailabilityChanged事件一起使用:

NetworkChange.NetworkAvailabilityChanged += myNetworkAvailabilityChangeHandler;

由于这是一个系统事件,请确保在完成后删除该事件,请在此处查看此帖:You need to be careful about using event handler for NetworkChange


3
投票

我能够在一定程度上解决这个问题。我能够在Code项目http://www.codeproject.com/script/Articles/ListVersions.aspx?aid=34650中找到一些示例代码。谢谢大家的回复。

尤其是格雷戈里先生发布的文章链接给了我很多帮助。


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

        }
    }
}

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

-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
© www.soinside.com 2019 - 2024. All rights reserved.