private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
startTime = DateTime.Now;
string ipPrefix = $"{numericUpDown1.Value}.{numericUpDown2.Value}.{numericUpDown3.Value}.";
int min = (int)numericUpDown4.Value;
int max = (int)numericUpDown5.Value;
if (min > max) { MessageBox.Show("IP 區間不合法!"); return; }
int threadCount = max - min + 1;
Thread[] threads = new Thread[threadCount];
progressBar1.Minimum = min;
progressBar1.Maximum = max + 1;
progressBar1.Value = min;
for (int i = min; i <= max; i++)
{
int idx = max - i; // 反向索引,順序不重要
PingScanner scanner = new PingScanner();
scanner.IP = ipPrefix + i;
scanner.UpdateCallback = new UpdateList(UpdateMyList);
threads[idx] = new Thread(new ThreadStart(scanner.Scan));
threads[idx].Start();
}
}
掃描 10.138.198.1 ~ 10 十個 IP:

圖 03:多執行緒掃描網路電腦 - 執行介面
lock) 爭用 — 大規模掃描建議使用 ThreadPool 或 Parallel.ForEach 限制並行數。TimeSpan 計算耗時Thread 建立、ThreadStart 委派、Start() 啟動delegate + Control.Invoke (本範例以 UpdateList 委派實作)