大家好。 今天我做了一个学校项目,有一件事困扰着我。
我的问题是,我将参数传递给 Thread 函数,当我通过 Console.WriteLine 将它打印到控制台时,它显示了错误的数字。
for (i = 0; i < 10; i++) autari[i] = new Thread(() => autar(i));
for (i = 0; i < 10; i++) motorkari[i] = new Thread(() => motorkar(i + 10));
当我以相同的周期启动它们时,它们的功能是这样的:
static void motorkar(int id)
{
Console.WriteLine("motorkar {0}", id);
...
这不是顺序问题,但是当我通过例如 0 时。调试中的 Visual Studio 写入控制台编号 2,而没有调试它写入 1。
可能是什么问题?我知道我可以通过设置字符串名称来解决这个问题,但我对此感到困惑。
最佳答案
这是由于编译器在后台为您创建了一个闭包。如果您将代码更改为以下内容,您应该会得到预期的输出
for (i = 0; i < 10; i++)
{
var local = i;
autari[i] = new Thread(() => autar(local))
}
for (i = 0; i < 10; i++)
{
var local = i + 10;
motorkari[i] = new Thread(() => motorkar(local))
}
关于C# 线程传递整数参数传递错误数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41081104/