2009-06-09 75 views

回答

4

ThreadState爲線程定義了一組全部 可能的執行狀態。 一旦創建了一個線程,它至少處於 狀態,直到它終止爲止 。 公共語言運行庫中創建的線程初始爲 處於未啓動狀態,而進入運行時的外部 線程已經處於運行狀態 。一個 通過調用啓動將未啓動的線程轉換爲運行狀態 。 並非所有ThreadState 值的組合都有效;例如, 線程不能同時處於被中止的 和未啓動狀態。

重要:線程狀態僅在幾個調試 方案中感興趣。您的代碼不應使用線程狀態 來同步線程的 活動。

的ThreadState:WaitSleepJoin:線程被阻塞的呼叫等待,睡眠,或加入的結果。

here

+0

+1,非常有幫助,謝謝。 「你的代碼不應該使用線程狀態來同步線程的活動。」你能詳細解釋一下你的意思嗎,謝謝! – Pwninstein 2009-06-09 15:16:04

4

MSDN

WaitSleepJoin該線程被阻塞。 這可能是調用 Thread.sleep代碼或的Thread.join,的 請求鎖的結果 - 例如,通過調用 或Monitor.Enter Monitor.Wait - 或等待線程 同步對象如 ManualResetEvent的。

簡短的回答是:是的!

+0

+1感謝您的鏈接! – Pwninstein 2009-06-09 15:13:13

2

我不希望這會作爲一個諷刺的答案過來,因爲這不會幫助任何人 - 所以請採取它的意圖精神。

您是否嘗試過使用按鈕創建一個簡單的Winform應用程序來啓動,停止和休眠線程和狀態區域以顯示thread.ThreadState的值?

這將回答你的問題。

如果你打算投票,至少要解釋原因。我試圖建議的是,在發佈問題之前,人們會做一些實驗。如果他們的實驗沒有回答他們的問題,他們可以在這裏問他們已經嘗試過的證據。

1

該線程應該放入ThreadState.WaitSleepJoin。

有關詳細信息,請參閱ThreadState's Documentation,具體如下:

WaitSleepJoin:「線程被阻塞這可能是調用線程的結果.. ::睡眠或線程.. ::加入請求的。鎖 - 例如,通過調用Monitor .. ::。Enter或Monitor .. ::。Wait - 或等待線程同步對象,如ManualResetEvent。「