在C#中如何判斷線程目前所處的狀态
老帥
在C#中,線程對象Thread使用ThreadState屬性訓示線程狀态,它是帶Flags特性的枚舉類型對象。
ThreadState 為線程定義了一組所有可能的執行狀态。一旦線程被建立,它就至少處于其中一個狀态中,直到終止。在公共語言運作時中建立的線程最初處于Unstarted狀态中,而進入運作時的外部線程則已經處于Running狀态中。通過調用 Start可以将Unstarted線程轉換為Running狀态。并非所有的ThreadState值的組合都是有效的;例如,線程不能同時處于Aborted和Unstarted狀态中。
是以判斷線程目前的狀态必須用bitmask按位運算來達到判斷目的,不能直接使用相等來判斷。
定義ThreadState如下:

1.判斷線程是否處于取消狀态
A.錯誤的判斷
(MyThread.ThreadState == ThreadState.AbortRequested)
B.正确的判斷 (MyThread.ThreadState & ThreadState.AbortRequested) != 0
2.判斷線程是否處于運作狀态
這個有一點特殊,因為ThreadState.Running本身等于0,不能用&運算,是以判斷可用以下方法: (MyThread.ThreadState == ThreadState.Running)