Visual Studio 为什么pingsender.Send方法会导致代码出现问题,如何使用此函数减少IP扫描时间?

ubof19bj  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(138)
for (int i = 5; i <= 15; i++)
{
    string temp = string.Concat(base_IP, i.ToString());
    //await Task.Delay(1000);
    PingReply reply = pingsender.Send(temp, timeout, buffer, options);

    if (reply.Status == IPStatus.Success)
    {
        textbox_progress.Text = textbox_progress.Text + "Connected IP -> " + temp + "\n\r";
    }
    progressBar.Value++; 
}
textbox_progress.Text = textbox_progress.Text + "Scanning Complete " + "\n\r";

在代码段中,进度条应该随着变量'*i *'的值的增加而增加。但是,它没有发生。进度条在循环结束后立即更新。如果我注解掉IP扫描函数并使用延迟函数,进度条工作正常。有人能帮助我修复它吗?
此外,扫描时间太长,我只是简单地发送了“abcd”来获取ping,这个小循环大约需要6秒才能完成,“timeout”的值是1 [虽然我搞不清楚“pingsender.Send()”函数是以秒还是以毫秒为单位].我

lsmepo6l

lsmepo6l1#

在同一线程上执行for循环时,无法更新ProgressBar。这是不可能的。
使用异步SendPingAsync方法:

for (int i = 5; i <= 15; i++)
{
    string temp = string.Concat(base_IP, i.ToString());

    PingReply reply = await pingsender.SendPingAsync(temp, timeout, buffer, options);

    if (reply.Status == IPStatus.Success)
    {
        textbox_progress.Text = textbox_progress.Text + "Connected IP -> " + temp + "\n\r";
    }
    progressBar.Value++;
}
textbox_progress.Text = textbox_progress.Text + "Scanning Complete " + "\n\r";

尽管我搞不清楚“pingsender.send()”函数是以秒还是以毫秒为单位
timeout参数指定等待ICMP回送应答消息的最大 * 毫秒 * 数(发送回送消息后)。

相关问题