暂停每次直到完成C#里面的线程

时间:2014-08-25 08:55:21

标签: c# multithreading

我遇到了这段代码的麻烦。我正在使用.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);
}

3 个答案:

答案 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
                }
                );