Я пытаюсь использовать LINQ для получения 5 лучших результатов пинга от ObservableCollection<PingReply>
, но в результате IEnumerable
имеет счет 0.
Может кто-нибудь объяснить, почему объект lastFive
в приведенном ниже коде возвращает счетчик 0, когда .Take(5)
применяется к PingReplies
?
Когда отправляется пинг, коллекция PingReplies
получает этот объект в ObservableCollection
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.NetworkInformation;
using System.Collections.ObjectModel;
namespace XXX.ServerMonitor.Servers
{
class WindowsServer : IServer
{
public WindowsServer(string address)
{
this.Address = address;
PingReplies = new ObservableCollection<PingReply>();
PingReplies.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(PingReplies_CollectionChanged);
}
void PingReplies_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
IEnumerable<PingReply> lastFive = PingReplies.Take(5);
if (lastFive.Where(a => a.Status != IPStatus.Success).Count() == 5)
{
// 5 failed attempts
// Server may be down
Console.WriteLine(Address + " may be down");
}
}
}
public ObservableCollection<PingReply> PingReplies { get; set; }
PingReply IServer.Ping()
{
PingReply reply = Utils.Ping.Send(this.Address);
PingReplies.Add(reply);
return reply;
}
public string Address { get; set; }
}
}
Редактировать: Фактический код загружен