private async void Work() { DisplayStatusMessage = false; IsWorking = true; // Measure time StartTime = DateTime.Now; stopwatch.Start(); dispatcherTimer.Tick += DispatcherTimer_Tick; dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); dispatcherTimer.Start(); EndTime = null; QueryResult.Clear(); Responses = 0; // Try to parse the string into an IP-Address IPAddress.TryParse(Host, out IPAddress ipAddress); try { // Try to resolve the hostname if (ipAddress == null) { IPHostEntry ipHostEntrys = await Dns.GetHostEntryAsync(Host); foreach (IPAddress ipAddr in ipHostEntrys.AddressList) { if (ipAddr.AddressFamily == AddressFamily.InterNetwork && SettingsManager.Current.SNMP_ResolveHostnamePreferIPv4) { ipAddress = ipAddr; continue; } else if (ipAddr.AddressFamily == AddressFamily.InterNetworkV6 && !SettingsManager.Current.SNMP_ResolveHostnamePreferIPv4) { ipAddress = ipAddr; continue; } } // Fallback --> If we could not resolve our prefered ip protocol for the hostname if (ipAddress == null) { foreach (IPAddress ipAddr in ipHostEntrys.AddressList) { ipAddress = ipAddr; continue; } } } } catch (SocketException) // This will catch DNS resolve errors { Finished(); StatusMessage = string.Format(Application.Current.Resources["String_CouldNotResolveHostnameFor"] as string, Host); DisplayStatusMessage = true; return; } // SNMP... SNMPOptions snmpOptions = new SNMPOptions() { Port = SettingsManager.Current.SNMP_Port, Timeout = SettingsManager.Current.SNMP_Timeout }; SNMP snmp = new SNMP(); snmp.Received += Snmp_Received; snmp.Timeout += Snmp_Timeout; snmp.Error += Snmp_Error; snmp.UserHasCanceled += Snmp_UserHasCanceled; snmp.Complete += Snmp_Complete; switch (Mode) { case SNMPMode.Get: if (Version != SNMPVersion.v3) { snmp.Getv1v2cAsync(Version, ipAddress, Community, OID, snmpOptions); } else { snmp.Getv3Async(ipAddress, OID, Security, Username, AuthenticationProvider, Auth, PrivacyProvider, Priv, snmpOptions); } break; case SNMPMode.Walk: if (Version != SNMPVersion.v3) { snmp.Walkv1v2cAsync(Version, ipAddress, Community, OID, SettingsManager.Current.SNMP_WalkMode, snmpOptions); } else { snmp.Walkv3Async(ipAddress, OID, Security, Username, AuthenticationProvider, Auth, PrivacyProvider, Priv, SettingsManager.Current.SNMP_WalkMode, snmpOptions); } break; case SNMPMode.Set: if (Version != SNMPVersion.v3) { snmp.Setv1v2cAsync(Version, ipAddress, Community, OID, Data, snmpOptions); } else { snmp.Setv3Async(ipAddress, OID, Security, Username, AuthenticationProvider, Auth, PrivacyProvider, Priv, Data, snmpOptions); } break; } // Add to history... AddHostToHistory(Host); AddOIDToHistory(OID); }