gpt4 book ai didi

c# - 在循环中启动线程,将数组元素传递给每个线程

转载 作者:行者123 更新时间:2023-12-02 00:35:08 25 4
gpt4 key购买 nike

我在循环中启动 4 个线程。每个线程获取对数组元素的引用来写入结果。

但是在我创建每个线程的行上,我收到一个System.IndexOutOfRangeException。我很惊讶索引“i”超出了范围。

这是一个例子:

void ThreadsStarter()
{
double[] data = new double[4];

for(int i = 0; i < 4; i++)
{
Thread my_thread = new Thread(() => Work(data[i]));
my_thread.Start();
}
}

void Work(double data)
{
}

为什么会发生这种情况?

最佳答案

这是一个常见错误:当线程启动时,i 被求值,这发生在循环结束后。创建一个 temp,将 i 分配给它,然后在 lambda 中使用 temp 而不是 i 来解决问题:

void ThreadsStarter()
{
double[] data = new double[4];

for(int i = 0; i < 4; i++)
{
var temp = i;
Thread my_thread = new Thread(() => Work(ref data[temp]));
my_thread.Start();
}
}

void Work(ref double data)
{
}

关于c# - 在循环中启动线程,将数组元素传递给每个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17767990/

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