public async Task ScanAllAsync() { _scannedHosts = 0; List <HostData> result = new List <HostData>(); await Task.Run(() => { lock (_lockObject) { Parallel.ForEach(Hosts, _parallelOptions, host => { if (!_isAborted) { host.Exists = HostChecker.CheckHost(host.Host); } else { host.Exists = false; } result.Add(host); _scannedHosts++; OnOneHostWasScanned?.Invoke(HostsCount, _scannedHosts, host); }); } }); OnScanEnding?.Invoke(result.ToArray()); _isAborted = false; }
/// <summary>Create LAN scanner. Init all possible LAN hosts.</summary> public LANHostScanner() { string[] localIPs = HostChecker.GetLocalIPs(); List <string> predicates = new List <string>(); foreach (var ip in localIPs) { // ip: 192.168.1.3 (For example) // predicate ^ // predicates in the different LANs not same. predicates.Add(ip.Split('.')[2]); } List <HostData> toCheck = new List <HostData>(); for (byte i = 0; i < byte.MaxValue; i++) { for (int j = 0; j < predicates.Count; j++) { toCheck.Add(new HostData($"{LAN_IP_BASE}{predicates[j]}.{i}", false)); } } Hosts = toCheck.ToArray(); }