J'essaie de créer un outil réseau simple pour exécuter une commande ping sur toutes les adresses IP possibles sur votre sous-réseau local et fournir une liste de ces adresses dans un DataGridView. Je suis nouveau à avoir à considérer threading qui est une bonne chose à rencontrer en tant que programmeur en herbe. Désolé, mais vous allez probablement devoir m'expliquer, mais dans mon esprit cela devrait fonctionner. Avant d'essayer de le placer dans un fil d'arrière-plan, l'application se bloquait et me donnait un "Ne répondant pas".Problèmes de threading en utilisant Ping pour mapper les adresses IP actives - C#
merci d'avance.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
count = 0;
for (int j = 1; j < 255; j++)
for (int i = 1; i < 255; i++)
{
Ping ping = new Ping();
PingReply pingreply = ping.Send(IPAddress.Parse(locip[0] + "." + locip[1] + "." + j + "." + i));
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);
count += 1;
progressBar.Value += 1;
}
}
}
Donc, cela est ou n'est pas dans un BackgroundWorker? Pouvez-vous nous montrer votre code d'installation de thread? – cmw
Dans la vue de conception, j'ai ajouté un objet BackgroundWorker appelé backgroundWorker1 et sur l'événement click du bouton 1, j'ai appelé backgroundWorker1.RunWorkerAsync(); Mais encore une fois, je crois que le problème réside dans la routine ping et les boucles. Avant même que j'aie ajouté le BackgroundWorker il se bloquerait et gèlerait ("ne répondant pas") quand ce code exact était dans un événement de clic. P.S. Travailler avec Visual Studio 2008 – user48202
Euh, vous faites 65536 pings. Beaucoup d'entre eux sont tenus de ne pas répondre. Vous devez le localiser dans le sous-réseau final. C'est beaucoup trop à gérer de manière significative. –