检测线程数组的完成

时间:2010-05-14 11:33:57

标签: c# .net multithreading

我创建了一个线程数组并启动了所有线程。如何知道所有线程是否已完成工作。我不想使用thread.wait或thread.join。

7 个答案:

答案 0 :(得分:4)

如果您使用的是.NET 4,则可以使用Task Parallel LibraryContinueWhenAll方法。

您必须修改线程以表示为Task。使用线程更容易处理任务。通常,您不必担心较低级别的事情,因为您现在必须这样做,例如安排或等待事情完成。

答案 1 :(得分:2)

嗯,你可以测试Thread.IsAlive - 但是当你测试它时,它会过时。您可以保留“当前活动”线程的列表,并在它们停止时一次删除它们,在测试运行之间休眠。有关更多详细信息,请使用Thread.ThreadState

这里的大局是什么?你想要实现什么,为什么不想调用Thread.Join(可能是超时)?

答案 2 :(得分:0)

MyThread.ThreadState == System.Threading.ThreadState.Stopped怎么样?

答案 3 :(得分:0)

您可以使用ThreadPool类而不是数组,并使用'GetAvailableThreads'方法检查所有线程是否都可用。参见:

ThreadPool class

答案 4 :(得分:0)

让线程回调您启动它们的类,以表明它们已完成

答案 5 :(得分:0)

如果要异步拦截工作,可以使用BackgroundWorkers,它们在事件args中都有RunWorkerCompleted事件和Error and Canceled属性

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

答案 6 :(得分:-1)

到底是什么?诊断? Console.WriteLine。

如果没有,请使用全局变量(如:所有线程都可访问),在其中一个线程启动时递增,在完成时递减。如果为0,则所有线程都完成了工作,但您必须小心正确地同步它,否则您将得到误报。在你开始之后你做了一个:

while (runningThreadsCount > 0)
{
    // There are still working threads
}