本節書摘來自華章出版社《c#多線程程式設計實戰(原書第2版)》一書中的第1章,第1.6節,作者(美)易格恩·阿格佛溫(eugene agafonov),黃博文 黃輝蘭 譯,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
本節将描述一個線程可能會有哪些狀态。擷取線程是否已經啟動或是否處于阻塞狀态等相應資訊是非常有用的。請注意由于線程是獨立運作的,是以其狀态可以在任何時候被改變。
為了學習本節,你需要安裝visual studio 2015。除此之外無需其他準備。本節的源代碼放置在booksampleschapter1recipe5目錄中。
請執行以下步驟來了解如何确定線程狀态及擷取線程相關的資訊。
1.啟動visual studio 2015。建立一個新的c#控制台應用程式項目。
2.在program.cs檔案中加入以下using指令:

3.在main方法下面加入以下代碼片段:
4.在main方法中加入以下代碼片段:
5.運作程式。
當主程式啟動時定義了兩個不同的線程。一個将被終止,另一個則會成功完成運作。線程狀态位于thread對象的threadstate屬性中。threadstate屬性是一個c#枚舉對象。剛開始線程狀态為threadstate.unstarted。然後我們啟動線程,并估計在一個周期為30次疊代的區間中,線程狀态會從threadstate.running變為threadstate.waitsleepjoin。
如果實際情況與以上不符,請增加疊代次數。終止第一個線程後,會看到現在該線程狀态為threadstate.aborted。程式也有可能會列印出threadstate.abortrequested狀态。這充分說明了同步兩個線程的複雜性。請記住不要在程式中使用線程終止。我在這裡使用它隻是為了展示相應的線程狀态。
最後可以看到第二個線程t2成功完成并且狀态為threadstate.stopped。另外還有一些其他的線程狀态,但是要麼已經被棄用,要麼沒有我們實驗過的幾種狀态有用。