Windows服务检测网络更改事件

时间:2012-05-22 16:53:30

标签: c# .net windows service

我需要在C#中创建一个事件监听器,让用户知道何时出现网络变化(如新的IP地址)。我已经尝试过研究以找到不同的方法来做到这一点,但我没有看到如何在C#中专门做到这一点并完成我需要完成的所有任务。我正在使用此处提供的信息http://msdn.microsoft.com/en-us/library/zt39148a.aspx#Y570建立一个监听器,但这对我来说也不起作用。轮询可能是我的最佳选择,但如果有人可以帮助解决这个问题,我们将不胜感激。我在XP和.NET 4.0上运行。

1 个答案:

答案 0 :(得分:4)

您可以在服务中监听NetworkChange事件:

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkAddressChanged);
    }

    protected override void OnStop()
    {
    }

    private void NetworkAddressChanged(object sender, EventArgs e)
    {
        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
        foreach (NetworkInterface n in adapters)
        {
            EventLog.WriteEntry("NetworkMonitor",String.Format("{0} is {1}", n.Name, n.OperationalStatus),EventLogEntryType.Warning);
        }
    }

}

有关IP地址的信息可在NetworkInterface中找到。

要获得上述服务中的IP地址信息,请执行以下操作:

IPInterfaceProperties adapterProperties = n.GetIPProperties();
IPAddressCollection addresses = adapterProperties.DhcpServerAddresses;
foreach (IPAddress address in addresses)
{
    //do something with address.ToString();
}