【问题标题】:Windows Service to detect network change event用于检测网络更改事件的 Windows 服务
【发布时间】:2012-05-22 16:53:29
【问题描述】:

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

【问题讨论】:

  • 有一个带有 NetworkChange 事件的 class in the .NET framework。除了 IP 地址更改之外,您还需要检测哪些其他事件?
  • 不,我只担心检测 IP 地址。我可以使用您所说的那个功能,但我不确定如何将它插入到 Windows 服务中。

标签: c# .net windows service


【解决方案1】:

你可以在你的服务中监听 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);
        }
    }

}

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

要在上述服务中获取 IP 地址信息,应该这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2021-05-31
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多