gpt4 book ai didi

c# - 线程循环!!意想不到的行为?

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:03 24 4
gpt4 key购买 nike

我正在 for 循环中创建线程,每次迭代都会创建一个线程。在这个线程中,我调用了一个从路径数组中获取路径的方法。当我运行 Debug模式时,线程会逐步调用路径数组中每个路径的方法。但是当我正常运行它时,线程调用了意外路径的方法。有时它会采用相同的路径 2 次,有时会一直使用相同的路径。

代码有什么问题?我在没有线程的情况下运行代码,它运行完美,但只有在线程中才会出现问题。

代码如下:

 for (int i = 0; i < appConfigDataPath.Length; i++)
{
var handle = new EventWaitHandle(false, EventResetMode.ManualReset);
string serverPath = appConfigDataPath[i];
string serverName = appConfigDataName[i];

var threadSplit = new Thread(() =>
{
ScanProcess(serverPath, serverName);
handle.Set();
});
threadSplit.Start();
waitHandles[i] = handle;
}

最佳答案

您需要定义不同的局部变量来保存循环的每次迭代中的路径信息。问题是由于将 Lambda 表达式与外部变量一起使用时“闭包”的性质,就像您在这里一样。

如果您在本地声明 serverPathserverName,在循环内而不是在外部,它应该按预期工作。

关于c# - 线程循环!!意想不到的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5150971/

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