LINQを使用してから上位5つのping結果を返そうとしていますObservableCollection<PingReply>
が、結果IEnumerable
のカウントは0です。
以下のコードのオブジェクトがに適用されlastFive
たときにカウント0を返す理由を誰かが説明できますか?.Take(5)
PingReplies
pingが送信されると、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; }
}
}
編集:アップロードされた実際のコード