Thread th1 = new Thread(new ThreadStart(H.顯示(線程計數器))); // ❌ 立即執行方法,傳回 void 給 ThreadStart
H.顯示(線程計數器) 是**方法呼叫**,會立即執行並回傳 void,而 ThreadStart 需要**無參無回傳的方法群組**。
Thread th1 = new Thread(() => H.顯示(線程計數器));
Thread th1 = new Thread(obj => H.顯示((int)obj));
th1.Start(線程計數器);
int num = 線程計數器;
Thread th1 = new Thread(() => H.顯示(num));
class 函數庫 {
public void 顯示(int i) {
Console.WriteLine($"這是第{i}個執行緒");
Thread.Sleep(2000);
Console.WriteLine($"第{i}個執行緒結束");
}
}
static void Main() {
var h = new 函數庫();
for (int i = 1; i <= 3; i++) {
int captured = i; // 重要:捕獲區域副本
new Thread(() => h.顯示(captured)).Start();
}
Console.ReadKey();
}
迴圈中直接捕獲 i 會導致所有執行緒看到相同最終值,必須建立區域變數副本。