Tengo una aplicación que hace ping a cada IP posible en su subred local para compilar una lista de direcciones IP receptivas. Actualmente hace ping all 255 uno a la vez. ¿Es posible convertir esta aplicación para usar varios hilos para aumentar la velocidad haciendo ping a más de uno a la vez? Soy nuevo en el concepto de múltiples hilos y creo que esta sería una buena forma de aprender (siempre que sea posible, por supuesto).Convertir la aplicación de ping a la versión multiproceso para aumentar la velocidad - C#
también, cualquier mejora estilística que pueda enseñarme también sería útil.
gracias de antemano
Aquí está el método de ping actual en un evento backgroundWorker1_DoWork.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
count = 0;
for (int i = 1; i < 255; i++)
{
Ping ping = new Ping();
PingReply pingreply = ping.Send(IPAddress.Parse(locip[0] + "." + locip[1] + "." + locip[2] + "." + i));
count += 1;
if (pingreply.Status == IPStatus.Success)
{
status = "o";
repAddress = pingreply.Address.ToString(); ;
repRoundtrip = pingreply.RoundtripTime.ToString();
repTTL = pingreply.Options.Ttl.ToString();
repBuffer = pingreply.Buffer.Length.ToString();
string[] lineBuffer = { status, repAddress, repRoundtrip, repTTL, repBuffer };
ipList.Rows.Add(lineBuffer);
}
progressBar.Invoke(new MethodInvoker(UpdateProgressBarByOne));
progressStatus.Text = ("Pinging IP " + count + " of 254");
}
button1.Enabled = true;
progressBar.Invoke(new MethodInvoker(ResetProgressBar));
}
Estoy seguro de que esto tiene todo el sentido, simplemente no tengo ni idea de lo que dice, jajaja. Lo siento si soy un remedio, esta solución está por encima de mi cabeza, lo que probablemente significa que mi pregunta también está por encima de mi cabeza. – user48202
cómo paso un argumento al invocar un método como este ipList.Invoke (new MethodInvoker (UpdateIpList (lineBuffer))); Me sigue diciendo que "UpdateIpList (lineBuffer)" no es un método. – user48202
Las formas e hilos de Windows no son fáciles de hacer. Lo mismo con la concurrencia, se necesita un poco de aprendizaje para hacerlo bien. Recomiendo mucho "Programming Visual C# 2008 la biblioteca de clases base", que tiene una gran introducción al enhebrado (y todas las partes buenas del framework también). – Spence