C# 用于检测网络更改事件的Windows服务

C# 用于检测网络更改事件的Windows服务,c#,.net,windows,service,C#,.net,Windows,Service,我需要在C#中创建一个事件侦听器,当网络发生变化时(比如新的IP地址),它会让用户知道。我试着做一些研究,以找到不同的方法来实现这一点,但我没有看到如何在C#中具体做到这一点,并完成我需要完成的所有任务。我正在使用这里提供的信息构建一个侦听器,但这对我也不起作用。投票对我来说可能是最好的选择,但如果有人能帮上忙,我将不胜感激。我在XP和.NET 4.0上操作。您只需监听服务中的网络更改事件: public partial class Service1 : ServiceBase { pu

我需要在C#中创建一个事件侦听器,当网络发生变化时(比如新的IP地址),它会让用户知道。我试着做一些研究,以找到不同的方法来实现这一点,但我没有看到如何在C#中具体做到这一点,并完成我需要完成的所有任务。我正在使用这里提供的信息构建一个侦听器,但这对我也不起作用。投票对我来说可能是最好的选择,但如果有人能帮上忙,我将不胜感激。我在XP和.NET 4.0上操作。

您只需监听服务中的网络更改事件:

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

您只需在服务中侦听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();
}

NetworkChange事件中存在一个错误。除了IP地址更改之外,您还需要检测哪些其他事件?不,我只担心检测IP地址。我可以使用您所说的功能,但我不确定如何将其插入Windows服务中。NetworkChange事件有一个错误。除了IP地址更改之外,您还需要检测哪些其他事件?不,我只担心检测IP地址。我可以使用你所说的功能,但我不知道如何将其插入Windows服务中。