gpt4 book ai didi

c# - 在循环中创建线程时将值传递给c#中的线程启动方法

转载 作者:行者123 更新时间:2023-11-30 19:38:32 25 4
gpt4 key购买 nike

我在循环中创建线程,我需要在线程启动方法中传递循环计数器(就像创建线程时一样)。

for (int i = 0; i < ListSize; i++)
{
thread = new Thread(() =>
Helper.GetEndToEndRequestProcessTime(EmailList[i], reqResultData, i, ListSize));
workerThreads.Add(thread);
thread.Start();
}

在上面的例子中,i 是变量 I 作为 GetEndToEndRequestProcessTime() 中的参数。但问题是,当线程实际开始 i 的值发生变化时,我在 GetEndToEndRequestProcessTime() 中得到了错误的结果。

我如何确保在线程启动时传递给 GetEndToEndRequestProcessTime() 的值与创建线程时提供的值相同。

最佳答案

每个新手都必须问的经典闭包和捕获变量问题。

for (int i = 0; i < ListSize; i++)
{
var j = i;
thread = new Thread(() => Helper.GetEndToEndRequestProcessTime(EmailList[j], reqResultData, j, ListSize));
workerThreads.Add(thread);
thread.Start();
}

更多信息:http://csharpindepth.com/articles/chapter5/closures.aspx

关于c# - 在循环中创建线程时将值传递给c#中的线程启动方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465391/

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