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

标签 c# multithreading

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

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

相关文章:

.net - IsBackground 对 .Net 线程的影响?

PHP 线程 ( pthreads ) 正在工作,但没有任何 Stackable 类

c# - 如何移动 Winform 对话框

C# - 将 "."替换为 double 值中的 ","

ios - 当图像设置为 nil 时 UIImageView 不重绘

java - 在 Java 中运行多个线程

c# - WebDriver C# - 使用部分文本从下拉列表中选择一个项目

c# - LINQ 查询为 Entity DB 中的嵌套对象返回 null

c# - 克隆对象的动机

python - Python 中可变数据的重复数据删除/合并