0

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

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

问题是,他们是否无论如何要检测该方法是否仍有线程执行它,例如使用信号量或带有互锁的计数器在方法开始时向上计数信号量并在结束时将其计数。所以如果它达到零,我知道它没有线程。

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

4

3 回答 3

2

使用具有已完成事件的 Backgroundworker

于 2009-04-14T19:59:33.913 回答
1

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

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

您可以检查:

mythread.IsAlive()

随时确定其状态。

于 2009-04-14T20:02:00.490 回答
0

在方法上使用 PostSharp 属性。

于 2009-05-04T17:33:38.323 回答