我有一個應用程序,可以在本地子網上ping每個可能的IP,以編譯響應IP地址列表。目前它一次只顯示255個。是否有可能轉換此應用程序使用多個線程來增加速度,通過一次ping多個?我是新來的多線程的概念,並認爲這將是一個很好的學習方式(只要有可能)。將Ping應用程序轉換爲多線程版本以提高速度 - C#
另外,你可以教我的任何風格改進也是有幫助的。提前
由於這裏處於backgroundWorker1_DoWork事件中的當前爆震的方法。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
count = 0;
for (int i = 1; i < 255; i++)
{
Ping ping = new Ping();
PingReply pingreply = ping.Send(IPAddress.Parse(locip[0] + "." + locip[1] + "." + locip[2] + "." + i));
count += 1;
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);
}
progressBar.Invoke(new MethodInvoker(UpdateProgressBarByOne));
progressStatus.Text = ("Pinging IP " + count + " of 254");
}
button1.Enabled = true;
progressBar.Invoke(new MethodInvoker(ResetProgressBar));
}
我敢肯定,這是完全合理的,我只是不知道它說什麼,哈哈。對不起,如果我是補救,這個解決方案是在我的頭上,這可能意味着我的問題也在我的頭上。 – user48202 2010-01-22 02:16:25
如何在調用此方法時傳遞參數ipList.Invoke(new MethodInvoker(UpdateIpList(lineBuffer)));它不斷告訴我「UpdateIpList(lineBuffer)」不是一種方法。 – user48202 2010-01-22 02:55:47
Windows窗體和線程並不容易。同時發生併發的事情,需要一點學習才能做到。我強烈推薦「Visual C#2008編程基礎類庫」,它有很好的線程介紹(以及框架的所有好的部分)。 – Spence 2010-01-22 03:13:11