C# 检测线程数组的完成情况

C# 检测线程数组的完成情况,c#,.net,multithreading,C#,.net,Multithreading,我已经创建了一个线程数组并启动了所有线程。如何知道是否所有线程都已完成工作。我不想使用thread.wait或thread.join 好吧,你可以进行测试,但是一旦你测试了它,那当然就过时了。您可以保留“当前活动”线程的列表,并在它们停止时一次删除一个,在测试运行之间休眠。有关更多详细信息,请使用 这里的大局是什么?您试图实现什么,为什么不调用线程.Join(可能会超时)?如果您使用的是.NET 4,则可以使用和方法 您必须修改线程以表示为的。任务比线程更容易处理。通常情况下,您不必担心较低级别

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

好吧,你可以进行测试,但是一旦你测试了它,那当然就过时了。您可以保留“当前活动”线程的列表,并在它们停止时一次删除一个,在测试运行之间休眠。有关更多详细信息,请使用


这里的大局是什么?您试图实现什么,为什么不调用
线程.Join
(可能会超时)?

如果您使用的是.NET 4,则可以使用和方法


您必须修改线程以表示为的。任务比线程更容易处理。通常情况下,您不必担心较低级别的事情,因为您现在不得不做一些事情,如调度或等待事情完成。

关于MyThread.ThreadState==System.Threading.ThreadState.Stopped怎么办?

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


.

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

如果要异步拦截工作,可以使用BackgroundWorkers,所有这些线程在事件参数中都有RunWorkerCompleted事件和错误以及取消的属性

它应该是
(MyThread.ThreadState&System.Threading.ThreadState.Stopped)=System.Threading.ThreadState.Stopped
,因为
ThreadState
具有FlagsAttrbiute,因此可以“包含”更多值。