我遇到了这段代码的麻烦。我正在使用.Net(C#)和Winform Application。
我有foreach循环文件在目录内,每个文件我想用一些函数运行线程..这里的问题是循环没有等待线程完成,结果是如果我有5个文件,我得到5个线程相互运行使我的pc冻结..是否可以暂停循环直到线程完成,然后继续循环其他线程??
foreach (string f in Directory.GetFiles(txtPath.Text))
{
Thread threadConversion = new Thread(new ParameterizedThreadStart(function name));
threadConversion.Start(function parameter);
}
答案 0 :(得分:3)
如果要按顺序读取文件,为什么不将整个内容移动到线程中?
Thread threadConversion = new Thread(() => {
foreach (string f in Directory.GetFiles(txtPath.Text))
{
//read file f
}
});
threadConversion.Start();
或者更好的是,使用任务:
await Task.Run(() => {
foreach (string f in Directory.GetFiles(txtPath.Text))
{
//read file f
}
});
//do some other stuff
答案 1 :(得分:1)
您不需要将该方法作为线程运行。就像这样运行:
foreach (string f in Directory.GetFiles(txtPath.Text))
{
function(parameter);
}
答案 2 :(得分:0)
您可以使用Parallel.ForEach方法(至少必须使用.net 4.0版本)
例如
Parallel.ForEach(Directory.GetFiles(txtPath.Text), f=>
{
//some code
}
);