天天看點

在C#中如何判斷線程目前所處的狀态

在C#中如何判斷線程目前所處的狀态

                                        老帥

   在C#中,線程對象Thread使用ThreadState屬性訓示線程狀态,它是帶Flags特性的枚舉類型對象。

   ThreadState 為線程定義了一組所有可能的執行狀态。一旦線程被建立,它就至少處于其中一個狀态中,直到終止。在公共語言運作時中建立的線程最初處于Unstarted狀态中,而進入運作時的外部線程則已經處于Running狀态中。通過調用 Start可以将Unstarted線程轉換為Running狀态。并非所有的ThreadState值的組合都是有效的;例如,線程不能同時處于Aborted和Unstarted狀态中。

   是以判斷線程目前的狀态必須用bitmask按位運算來達到判斷目的,不能直接使用相等來判斷。

   定義ThreadState如下:  

在C#中如何判斷線程目前所處的狀态

   1.判斷線程是否處于取消狀态

   A.錯誤的判斷

    (MyThread.ThreadState == ThreadState.AbortRequested)   

   B.正确的判斷    (MyThread.ThreadState & ThreadState.AbortRequested) != 0

   2.判斷線程是否處于運作狀态   

   這個有一點特殊,因為ThreadState.Running本身等于0,不能用&運算,是以判斷可用以下方法:   (MyThread.ThreadState == ThreadState.Running)