gpt4 book ai didi

C# 线程方法名称预期错误

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

我正在尝试创建一个简单的线程处理程序(假设这是我第一次尝试线程处理),我想要它做的就是对 string[] 中的每个字符串简单地通过 void 并执行简单的文件夹爬行.但是,我收到了预期的方法名称,我不确定为什么

string[] FileListing = {@"C:\","E:\"};
foreach (string fl in FileListing)
{
ProjectDirectoryProcessing pjp = new ProjectDirectoryProcessing();
//error here
Thread oThread = new Thread(new ThreadStart(pjp.ProjectProcessor(fl)));
oThread.Start();
}

public class ProjectDirectoryProcessing
{
public void ProjectProcessor(string rootDirectory)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
HashSet<string> DirectoryHolding = new HashSet<string>();
//do some work
//foreach loop
};
}

最佳答案

您必须将一个委托(delegate) 传递给线程构造函数。最简单的方法是使用 lambda 表达式:

string copy = fl;
Thread oThread = new Thread(() => pjp.ProjectProcessor(copy));

请注意,由于捕获循环变量的方式,您需要复制循环变量。 (有关详细信息,请参阅 Eric Lippert's blog post。)

或者,当您在每次迭代中创建一个新的 ProjectDirectoryProcessing 实例时,您可以将字符串传递给构造函数:

foreach (string fl in FileListing)
{
// Note change in name to be clearer (IMO)
ProjectDirectoryProcessor pjp = new ProjectDirectoryProcessor(fl);
Thread oThread = new Thread(pjp.Execute);
oThread.Start();
}

...

public class ProjectDirectoryProcessor
{
private readonly string rootDirectory;

public ProjectDirectoryProcessor(string rootDirectory)
{
this.rootDirectory = rootDirectory;
}

public void Execute()
{
Stopwatch stopwatch = Stopwatch.StartNew();
HashSet<string> DirectoryHolding = new HashSet<string>();
// do some work
//foreach loop
}
}

关于C# 线程方法名称预期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910940/

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