gpt4 book ai didi

C# 线程传递整数参数传递错误数字

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:01 25 4
gpt4 key购买 nike

大家好。今天我做了一个学校项目,有一件事困扰着我。

我的问题是,我将参数传递给 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com