在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)
終止當前線程:
Thread.CurrentThread.Abort()用於終止當前線程。
當然了,你需求中不但要終止當前線程,還要執行別的業務,彈出form。那么就需要一個新的委托,在線程過程中調用這個委托來終止現成,從而達到在終止線程后執行其他業務。
大概代碼,我就寫個大概的:
public delegate void StopThreadDelegate(Thread t);
static void StopThread(Thread t)
{
//關閉線程
t.Abort();
//啟動新窗體
}
public static void Main()
{
new Thread(delegate(object data)
{
//這里是你的執行邏輯
//當要執行退出線程時
dynamic d = data;
//var d = (StopThreadDelegate)data; //非4.0
d(Thread.CurrentThread);
}).Start(new StopThreadDelegate(StopThread));
}
