我是新手,我在 C# 中有一個多線程實現。但結果返回錯誤。文件<number.txt>編號為 0 到 1000。但返回值是 1 到 1000。不是 0。請幫助我理解問題所在。謝謝你。static void Number(int number){ List<string> l_number = new List<string>(File.ReadAllLines("number.txt")); Console.WriteLine(l_number[number]);}static void Main(string[] args){ List<Thread> l_thread = new List<Thread>(); int soThread = 10; Thread thread1 = new Thread(delegate () { var numnum = 0; while (true) { for (int i = 0; i < soThread; i++) { Thread threadnew = new Thread(delegate () { //Console.WriteLine(numnum); Number(numnum); }); threadnew.Start(); l_thread.Add(threadnew); numnum++; Thread.Sleep(100); } foreach (Thread item in l_thread) { item.Join(); } } });
1 回答
慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
您正在捕獲 numnum- 它不是每個線程,并且時間意味著它不是捕獲時的值 - 它是線程被調度時的值;嘗試為每個范圍創建一個變量副本,即
for (int i = 0; i < soThread; i++)
{
int copy = numnum;
Thread threadnew = new Thread(delegate ()
{
//Console.WriteLine(copy);
Number(copy);
});
// ...
}
- 1 回答
- 0 關注
- 109 瀏覽
添加回答
舉報
0/150
提交
取消
