for (int i = 1; i < 100; i++)??????????? {??????????????? ThreadPool.QueueUserWorkItem((o) =>??????????????? {??????????????????? int z = i;??????????????????? Thread.Sleep(1000);??????????????????? Console.Write(z.ToString()); ??????????????????? Console.Write(Environment.NewLine); ??????????????? });??????????? }
為啥輸出的都是100呢,,不是用z保存了變量了嗎
9 回答

隔江千里
TA貢獻1906條經驗 獲得超10個贊
for (int i = 1; i < 100; i++)??????????? {??????????????? ThreadPool.QueueUserWorkItem((o) =>??????????????? {??????????????????? int z = (int)o;??????????????????? Thread.Sleep(1000);??????????????????? Console.Write(z.ToString());???????????????????? Console.Write(Environment.NewLine);???????????????? },i);??????????? }

海綿寶寶撒
TA貢獻1809條經驗 獲得超8個贊
老兄位置放錯啦!~
?看我這個吧:
for (int i = 1; i < 100; i++)
{
ThreadPool.QueueUserWorkItem(start =>
{
int z = i;
Console.WriteLine(z.ToString());
});
Thread.Sleep(1);//在循環中需要調用一下,由于被置于ThreadPool中的操作是異步,所以還沒有來的執行,z就被for循環改變,永遠是100
}

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
i是公共的變量。你所有的100個后臺的線程都是有了它,這個情況下你輸出的時候,主線程for循環已經走完,此時i是100,你說不是100,難道是1 , 2, 3。。。。。 什么的?
如果要輸入1,2,3.....
for (int i = 1; i < 100; i++)??????????? {
int z = i;??????????????? ThreadPool.QueueUserWorkItem((o) =>??????????????? {??????????????????? Thread.Sleep(1000);??????????????????? Console.Write(z.ToString());???????????????????? Console.Write(Environment.NewLine);???????????????? });??????????? }
- 9 回答
- 0 關注
- 394 瀏覽
添加回答
舉報
0/150
提交
取消