private void CreatePingers(int cnt) { for (var i = 1; i <= cnt; i++) { Pingers.Add(new Ping()); } }
public async Task <List <IPAddress> > SearchAsync() { CreatePingers(255); var po = new PingOptions(Ttl, true); var enc = new System.Text.ASCIIEncoding(); var data = enc.GetBytes("abababababababababababababababab"); var found = new List <IPAddress>(); var tasks = Pingers.Select((p, o) => { return(Task.Factory.StartNew(async() => { lock (_lock) { Instances += 1; } var pingReply = await p.SendPingAsync($"{BaseIp}{o++}", TimeOut, data, po); if (pingReply.Status == IPStatus.Success) { found.Add(pingReply.Address); } })); }) .Cast <Task>() .ToList(); await Task.WhenAll(tasks); DestroyPingers(); return(found); }
/// <summary> /// Releases the memory used by the pingers. /// </summary> public void Dispose() { i3d_ping_pingers_destroy(_ptr); lock (Pingers) { Pingers.Remove(_ptr); } }
private void DestroyPingers() { foreach (var p in Pingers) { p.Dispose(); } Pingers.Clear(); }
/// <summary> /// Creates a new instance of the <see cref="I3dPingersWrapper"/> class. /// Should be disposed. /// </summary> /// <param name="logCallback">The logging callback.</param> public I3dPingersWrapper(Action <I3dLogLevel, string> logCallback, I3dIpList ipList) { _logCallback = logCallback; int code = i3d_ping_pingers_create(out _ptr, ipList.Ptr); I3dErrorValidator.Validate(code); code = i3d_ping_pingers_set_logger(_ptr, LogCallback, _ptr); I3dErrorValidator.Validate(code); lock (Pingers) { Pingers.Add(_ptr, this); } }