gpt4 book ai didi

c# - 使用Ping映射事件IP的线程问题-C#

转载 作者:行者123 更新时间:2023-12-03 13:22:27 26 4
gpt4 key购买 nike

我正在尝试创建一个简单的网络工具来ping您本地子网上的所有可能的IP,并在DataGridView中提供此类IP的列表。我是新来的必须考虑线程处理的人,这是一个崭露头角的程序员,这是一件好事。抱歉,您可能需要向我做一些解释,但是在我看来,这应该可以工作。在尝试将其放入backgroundworker线程之前,该应用程序将挂起并给我“无响应”。

提前谢谢。

        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;
}

}


}

最佳答案

问题的一部分是您正在直接从后台线程访问UI元素。字段progressBar大概是UI进度条控件,只能从UI线程安全地访问。您必须使用对.Invoke的调用才能从UI线程设置此值。

progressBar.Invoke(new MethodInvoker(UpdateProgressBarbyOne));
...

private void UpdateProgressBarByOne() {
progressBar.Value += 1;
}

关于c# - 使用Ping映射事件IP的线程问题-C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com