我还在学习如何使用多线程,我有一种奇怪的行为。在没有断点的情况下执行以下代码时,传递给线程函数的值会递增(如果i = 0,x将为1)我不知道原因。
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(() => WriteNumbers(i));
t.Start();
// Console.WriteLine(i);
}
Console.ReadLine();
}
static void WriteNumbers(int x)
{
string c = "";
switch (x)
{
case 0:
c = " A ";
break;
case 1:
c = " B ";
break;
case 2:
c = " C ";
break;
case 3:
c = " D ";
break;
case 4:
c = " E ";
break;
}
for (int j = 0; j < 5; j++)
{
Console.Write(c);
}
}
但是,如果我取消对WriteLine(i)的评论。委托函数将正确接收参数。
修改
Anonymous c# delegate within a loop中的答案&amp; https://blogs.msdn.microsoft.com/ericlippert/2009/11/12/closing-over-the-loop-variable-considered-harmful/ 没有解释两件事: 1-为什么不是X的所有值都是5?我得到一些4s和5s。 2-为什么添加Console.WriteLine(i)可以解决问题。