/// <summary> /// Creates a new network address event arguments instance. /// </summary> /// <param name="information">The address information.</param> public UnicastNetworkAddressEventArgs(UnicastNetworkAddressInformation information) { this.Information = information; }
/// <summary> /// Updates the network information. /// </summary> private static void OnUpdate() { lock (NetworkConfiguration.sync) { // Set the information for all addresses to stale. NetworkConfiguration.unicastInformation.ForEach(info => info.Stale = true); // For all network interfaces. foreach (NetworkInterface iface in NetworkInterface.GetAllNetworkInterfaces()) { // Get the IP properties. IPInterfaceProperties ipProperties = iface.GetIPProperties(); // For all unicast IP addresses. foreach (UnicastIPAddressInformation info in ipProperties.UnicastAddresses) { // Find the corresponding address information. UnicastNetworkAddressInformation information = NetworkConfiguration.unicastInformation.FirstOrDefault(inf => inf.Information.Address == info.Address); // If there exists an address information. if (null != information) { // If the information has changed. if (information.Interface != iface || information.UnicastInformation != info) { // Update the information. information.Interface = iface; information.UnicastInformation = info; } // Set the information as not stale. information.Stale = false; } else { // Create a new address information. information = new UnicastNetworkAddressInformation(iface, info); // Add the address information to the list. NetworkConfiguration.unicastInformation.Add(information); } } } // Remove the stale address information records. NetworkConfiguration.unicastInformation.RemoveAll(info => info.Stale); // Order the address information records. NetworkConfiguration.unicastInformation.OrderBy(info => info.Information.Address); } }