2009-04-14 43 views
0

我有一个队列,它基本上是albahari.com线程簿中的生产者/使用者队列,它将队列项从队列中取出,这是一个操作执行阻塞队列,然后调用一个方法来执行队列项中的动作列表。无论如何检测线程方法是否已完成

我可以很容易地杀死队列,通过enqueing一个空操作块并通过使用thread.sleep()等待一个thread.sleep()来阻塞主线程,直到队列计数变为零,并且所有线程都通过!= null循环,从而完成,但执行最后一个动作列表的方法仍可能正在执行最后一个线程。

问题是,他们是否会检测该方法是否还有执行它的线程,例如可能使用信号量或带有互锁的计数器来计算方法开始时的信号量并在最后对其进行计数。所以如果它达到零,他们我知道它不是线程的。

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

+0

这是我使用的System.Threading.Thread模型,IsAlive属性是测试的理想选择,它很有用。感谢您及时的回复。 – 2009-04-14 23:36:28

回答

1

如果你开始这样一个线程BackgroundWorker的:

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

您可以检查:

mythread.IsAlive() 

在任何时候,以确定其状态。

+0

很久很久以前,轮询状态已被弃用,使用事件。 – arul 2009-04-14 20:04:29

0

在该方法上使用PostSharp属性。

相关问题