private void CalculatePacketLoss()
        {
            var lossCount = (double)PingReplies.Count(r => !r.IsSuccess);

            if (lossCount < 1)
            {
                LossPercentage = 0;
                return;
            }

            var allCount = (double)PingReplies.Count;

            LossPercentage = (int)((lossCount / allCount) * 100);
        }
        private void OnPingCompleted(object sender, PingCompletedEventArgs e)
        {
            if (PingReplies.Count() > MaxReply)
            {
                Dispatcher.Invoke(() => PingReplies.RemoveAt(PingReplies.Count - 1));
            }

            LastReply = new PingReplyWrapper(e.Reply);
            Dispatcher.Invoke(() => PingReplies.Insert(0, LastReply));

            CalculateAverage();
            CalculatePacketLoss();

            Task.Delay(PingInterval).ContinueWith(_ => { if (IsRunning)
                                                         {
                                                             StartPing();
                                                         }
                                                  });
        }
 private void CalculateAverage()
 {
     LatencyAverage = Convert.ToInt16(PingReplies.Average(r => (r.IsSuccess) ? r.ReplyData.RoundtripTime : 0));
 }