参数值在委托中递增

时间:2016-04-05 11:31:18

标签: c# multithreading

我还在学习如何使用多线程,我有一种奇怪的行为。在没有断点的情况下执行以下代码时,传递给线程函数的值会递增(如果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)可以解决问题。

0 个答案:

没有答案