我创建了一个线程数组并启动了所有线程。如何知道所有线程是否已完成工作。我不想使用thread.wait或thread.join。
答案 0 :(得分:4)
如果您使用的是.NET 4,则可以使用Task Parallel Library和ContinueWhenAll方法。
您必须修改线程以表示为Task。使用线程更容易处理任务。通常,您不必担心较低级别的事情,因为您现在必须这样做,例如安排或等待事情完成。
答案 1 :(得分:2)
嗯,你可以测试Thread.IsAlive
- 但是当你测试它时,它会过时。您可以保留“当前活动”线程的列表,并在它们停止时一次删除它们,在测试运行之间休眠。有关更多详细信息,请使用Thread.ThreadState
。
这里的大局是什么?你想要实现什么,为什么不想调用Thread.Join
(可能是超时)?
答案 2 :(得分:0)
MyThread.ThreadState == System.Threading.ThreadState.Stopped怎么样?
答案 3 :(得分:0)
您可以使用ThreadPool类而不是数组,并使用'GetAvailableThreads'方法检查所有线程是否都可用。参见:
答案 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
}