C#多线程在任何其他线程完成后添加一个线程

时间:2015-02-24 08:39:43

标签: c# multithreading winforms backgroundworker

我正在使用winforms开发文档转换器。

我想使用多线程并行转换3个文档,并且任何一个文档转换完成,然后其他文档转换必须以新线程开始。

我正在尝试使用多线程,但我无法找到如何将线程放入队列。

有没有办法在c#中实现这个。

2 个答案:

答案 0 :(得分:3)

我会使用Task来做到这一点。可以在MSDN Task Parallelism中找到大量信息。

以最简单的形式创建Task对象并启动它们,之后您可以使用Task.WhenAny()检查其中是否有任何已完成并启动更多。最后,您可以使用Task.WhenAll()查看所有任务的完成时间。

您也可以创建所有任务并让系统处理并发,除非您特别需要三个并发运行。

答案 1 :(得分:2)

据我了解,您正在寻找一种以有限的并发性并行处理多个文档的方法。您可以使用Parallel类来实现此目的。

ParallelOptions options=new ParallelOptions { MaxDegreeOfParallelism=3 };
Parallel.ForEach(documentCollection,options,document => ConvertDocument(document));