首页 文章

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

提问于
浏览
0

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

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

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

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

3 回答

  • 1

    如果您启动这样的线程:

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

    你可以查看:

    mythread.IsAlive()
    

    在任何时候确定其状态 .

  • 2

    使用已完成事件的Backgroundworker

  • 0

    在方法上使用PostSharp属性 .

相关问题