private void Ping_PingReceived(object sender, PingReceivedArgs e) { PingInfo pingInfo = PingInfo.Parse(e); // Add the result to the collection Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(delegate() { lock (PingResult) PingResult.Add(pingInfo); })); // Calculate statistics PingsTransmitted++; if (pingInfo.Status == System.Net.NetworkInformation.IPStatus.Success) { PingsReceived++; if (PingsReceived == 1) { MinimumTime = pingInfo.Time; MaximumTime = pingInfo.Time; } else { if (MinimumTime > pingInfo.Time) { MinimumTime = pingInfo.Time; } if (MaximumTime < pingInfo.Time) { MaximumTime = pingInfo.Time; } // lock, because the collection is changed from another thread... // I hope this won't slow the application or causes a hight cpu load lock (PingResult) AverageTime = (int)PingResult.Average(s => s.Time); } } else { PingsLost++; } }
private void Ping_PingReceived(object sender, PingReceivedArgs e) { PingInfo pingInfo = PingInfo.Parse(e); // Add the result to the collection PingResult.Add(pingInfo); // Calculate statistics PingsTransmitted++; if (pingInfo.Status == System.Net.NetworkInformation.IPStatus.Success) { PingsReceived++; if (PingsReceived == 1) { MinimumTime = pingInfo.Time; MaximumTime = pingInfo.Time; } else { if (MinimumTime > pingInfo.Time) { MinimumTime = pingInfo.Time; } if (MaximumTime < pingInfo.Time) { MaximumTime = pingInfo.Time; } } // I don't know if this can slow my application if the collection is to large AverageTime = (int)PingResult.Average(s => s.Time); } else { PingsLost++; } }