无论如何要检测线程方法是否已完成

时间:2009-04-14 19:56:03

标签: c# multithreading blocking

我有一个队列,它基本上是albahari.com中的生产者/消费者队列 线程簿,它从队列中取出一个队列项,这是一个离开队列的动作执行块,然后调用一个方法来执行队列项中的动作列表。

我可以通过排队空动作块并通过使用thread.sleep()进行旋转/等待来阻止主线程,直到队列计数变为零,并且所有线程都会崩溃,从而轻松地杀死队列! = null循环,从而完成,但执行最后一个动作列表的方法可能仍在执行最后一个线程。

问题是,他们无论如何都要检测该方法是否还有执行它的线程,比如可能使用信号量或带有互锁的计数器来计算方法开头的信号量并在结束时将其计数。因此,如果它达到零,我知道它没有线程。

这是在接口上实现destroy方法,在调用dispose之前关闭它。

3 个答案:

答案 0 :(得分:2)

使用已完成事件的Backgroundworker

答案 1 :(得分:1)

如果您启动这样的话:

System.Threading.Thread mythread = new System.Threading.Thread();
mythread.Start();

您可以查看:

mythread.IsAlive()

随时确定其状态。

答案 2 :(得分:0)

在方法上使用PostSharp属性。