2009-04-14 42 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屬性。

相關問題