デリゲート ステートメントで i を参照することは有効ですか?
targets[i].PingReply = e.Reply;
で定義された同じ配列要素を参照しますか?
pingSender.SendAsync( targets[i].IPAddress, targets[i].Timeout);
または、デリゲートが発火したときに i の値に何か別のことが起こっていますか? PingCompleted で i=3 の範囲外のインデックスを取得しているため、理由がわかりません。
public void Ping(PingTest[] targets)
{
var finished = new CountdownEvent(targets.Count());
for (int i = 0; i < targets.Count(); i++)
{
finished.AddCount();
var pingSender = new Ping();
pingSender.PingCompleted += (sender, e) =>
{
targets[i].PingReply = e.Reply;
finished.Signal();
};
pingSender.SendAsync(targets[i].IPAddress, targets[i].Timeout);
}
finished.Signal();
finished.Wait();
}
これが呼び出しです...
var pingTests = new PingTest[]
{
new PingTest("Router", new IPAddress(new byte[] {192, 168, 1, 8}), 2),
new PingTest("Exchange", new IPAddress(new byte[] {192, 168, 1, 78}), 3),
new PingTest("SQL", new IPAddress(new byte[] {192, 168, 1, 99}), 3)
};
netwrkService.Ping(pingTests);