Итак, у меня есть этот код ниже. Я нашел предварительный пост и работал отсюда. Но по какой-то причине он не перебирает и не обновляет ячейки с ответом. Он обновляет только последний ip в списке.C# Windows Forms ping.SendAync проблемы с DataGridView
private static void ping_PingCompleted(object sender, PingCompletedEventArgs e)
{
var reply = e.Reply;
DataGridViewRow row = e.UserState as DataGridViewRow;
DataGridViewCell PingStat = row.Cells["cPing"];
if (!(reply == null))
{
switch (reply.Status)
{
case IPStatus.Success:
PingStat.Value = string.Format("Reply from {0}: bytes={1} time={2}ms TTL={3}", reply.Address, reply.Buffer.Length, reply.RoundtripTime, reply.Options.Ttl);
break;
case IPStatus.TimedOut:
PingStat.Value = "Connection has timed out...";
break;
default:
PingStat.Value = string.Format("Ping failed: {0}", reply.Status.ToString());
break;
}
}
}
private void bPing_Click(object sender, EventArgs e)
{
String ip;
Ping ping = new Ping();
foreach (DataGridViewRow row in dgvData.Rows)
{
if(!row.IsNewRow)
{
ip = row.Cells["cIPAddress"].Value.ToString();
ping.PingCompleted += new PingCompletedEventHandler(ping_PingCompleted);
ping.SendAsync(ip, 1000, row);
System.Threading.Thread.Sleep(5);
}
}
}
Что я делаю неправильно? Я думал, добавив строку в ping.SendAsync, она будет отслеживать все ответы на соответствующие ip/row?
ОБНОВЛЕНО код Я работаю с
private static void ping_PingCompleted(object sender, PingCompletedEventArgs e)
{
var reply = e.Reply;
DataGridViewRow row = e.UserState as DataGridViewRow;
DataGridViewCell PingStat = row.Cells["cPing"];
if (reply != null)
{
switch (reply.Status)
{
case IPStatus.Success:
PingStat.Value = string.Format("Reply from {0}: bytes={1} time={2}ms TTL={3}", reply.Address, reply.Buffer.Length, reply.RoundtripTime, reply.Options.Ttl);
break;
case IPStatus.TimedOut:
PingStat.Value = "Connection has timed out...";
break;
default:
PingStat.Value = string.Format("Ping failed: {0}", reply.Status.ToString());
break;
}
}
}
private void bPing_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dgvData.Rows)
{
if (!row.IsNewRow)
{
Debug.WriteLine("Rows");
String ip;
Ping ping = new Ping();
ip = row.Cells["cIPAddress"].Value.ToString();
ping.PingCompleted += new PingCompletedEventHandler(ping_PingCompleted);
ping.SendAsync(ip, 1000, row);
System.Threading.Thread.Sleep(5);
}
}
}
Что делать, если вы создаете новые экземпляры 'Ping' для каждой строки? –
Позвольте мне сделать это снимок –
Я сделал то, что предложил Макс фон Хиппель, и все еще нет. –