2017-08-31 55 views
3

我想從192.168.1.1來ping 192.168.1.255到跳到下一個迭代,如果它需要太多的時間C#

於是我就用

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; 

} 

,我遇到的是這個問題:

PingReply reply = pinger.Send(AdresaIp); 

pingable = reply.Status == IPStatus.Success; 

當平從上方成功兩個線具有2毫秒的執行時間,但是當它失敗(巫會發生多次)它需要大約3秒,女巫是巨大的,如果我平255級的IP。

所以我想實現以下方式定時器:

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

迭代。

我嘗試了System.Diagnostics.Stopwatch.StartNew(),doesen't沒有爲我工作,因爲它給了我的時間後,ping測試。 我需要一些東西,可以讓我檢查ping測試是否正常工作,所以在達到1秒鐘的時候,我可以使用CONTINUE命令。

感謝,

弗拉德

+2

'pinger'類型是什麼? – mjwills

+0

Ping pinger = new Ping(); –

+1

您可能還想考慮使用https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-for-loop。 – mjwills

回答

5

您可以只使用Ping.Send Method (IPAddress, Int32) 。第二個參數是一個超時:

超時

類型:System.Int32

,指定的最大毫秒數(發送回聲消息之後)

一個Int32值等待ICMP迴應回覆消息。

+0

謝謝,我只需要添加「,1000」:D –