2017-08-31 4 views
3

Je veux faire un ping de 192.168.1.1 à 192.168.1.255Passer à l'itération suivante si elle prend beaucoup de temps à C#

J'utilise

FOR(i=1;i<=255;i++) 

//each time, I test the IP address by pinging it with the following code 

try { 

PingReply reply = pinger.Send(AdresaIp); 
pingable = reply.Status == IPStatus.Success; 

} 

catch (PingException) 

{ 

    // Discard PingExceptions and return false; 

} 

Le problème que je rencontre est à:

PingReply reply = pinger.Send(AdresaIp); 

pingable = reply.Status == IPStatus.Success; 

lorsque le ping réussit les deux lignes d'en haut ont un temps d'exécution de 2 millisecondes, mais quand il échoue (sorcière se produira plusieurs fois), il prend environ 3 secondes, sorcière est énorme si je ping 255 adresses IP.

Je veux mettre en œuvre une minuterie de la manière suivante:

if (timer > 1 second) continue; 
    //if it takes more than 1 second for the current iteration jump to the next 

itération.

J'ai essayé le System.Diagnostics.Stopwatch.StartNew(), ne fonctionne pas pour moi, car il me donne le temps après que le ping est testé. J'ai besoin de quelque chose qui me permette de vérifier PENDANT que le test Ping fonctionne, donc au moment où il atteint 1 seconde, je peux utiliser la commande CONTINUER.

Merci,

Vlad

+2

Quel est le type de 'pinger'? – mjwills

+0

Ping Pinger = nouveau Ping(); –

+1

Vous pouvez également envisager d'utiliser https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-for-loop. – mjwills

Répondre

5

Vous pouvez simplement utiliser Ping.Send Method (IPAddress, Int32) . Le second paramètre est un délai d'attente:

délai d'attente

Type: System.Int32

Valeur Int32 qui spécifie le nombre maximal de millisecondes (après l'envoi du message d'écho) d'attendre l'écho ICMP message de réponse.

+0

Merci, j'avais juste besoin d'ajouter ", 1000": D –