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

C#多线程在任何其他线程完成后添加一个线程,c#,multithreading,winforms,backgroundworker,C#,Multithreading,Winforms,Backgroundworker,我正在使用winforms开发一个文档转换器 我想使用多线程来并行转换3个文档,任何一个文档转换完成后,其他文档转换必须作为新线程启动 我正在尝试使用多线程,但我无法找到如何将线程放入队列中 有没有办法在c#中实现这一点 我会使用任务s来完成这个任务。在MSDN中可以找到很多信息 以最简单的形式创建任务对象并启动它们,然后可以使用Task.whenny()检查其中是否有任务对象已完成并启动更多任务。最后,您可以使用Task.WhenAll()查看所有任务何时完成 您也可以创建所有任务并让系统处理

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

我想使用多线程来并行转换3个文档,任何一个文档转换完成后,其他文档转换必须作为新线程启动

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


有没有办法在c#中实现这一点

我会使用
任务
s来完成这个任务。在MSDN中可以找到很多信息

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


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

为此,我将使用
Task
s。在MSDN中可以找到很多信息

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


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

据我所知,您正在寻找一种以有限并发性并行处理多个文档的方法。您可以为此目的使用类

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

据我所知,您正在寻找一种以有限并发性并行处理多个文档的方法。您可以为此目的使用类

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

在队列中放置线程没有多大意义。尝试将任务放置在队列中,让线程对其进行处理。您可以使用ThreadPool。您应该使用ThreadPool,让线程池管理器负责管理线程,或者使用任务/并行库进行更多控制,但老实说,我认为线程池可以根据您的要求正常工作。将线程放在队列中没有多大意义。尝试将任务放置在队列中,让线程对其进行处理。您可以使用threadpool。您应该使用threadpool,让线程池管理器负责管理线程,或者使用Task/Parallel library进行更多控制。但老实说,我认为线程池将按照您的要求正常工作。