二.操縱一個線程
任何程序在執行時,至少有一個主線程,下面這段小程序可以給讀者一個直觀的印象:
//SystemThread.cs
using System;
using System.Threading;
namespace ThreadTest
{
class RunIt
{
[STAThread]
static void Main(string[] args)
{
Thread.CurrentThread.Name="System Thread";//給當前線程起名為"System Thread"
Console.WriteLine(Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread.ThreadState);
Console.ReadLine();
}
}
}
編譯執行後你看到了什麼?是的,程序將產生如下輸出:
System Thread's Status:Running
在這裡,我們通過Thread類的靜態屬性CurrentThread獲取了當前執行的線程,對其Name屬性賦值“System Thread”,最後還輸出了它的當前狀態(ThreadState)。所謂靜態屬性,就是這個類所有對象所公有的屬性,不管你創建了多少個這個類的實例,但是類的靜態屬性在內存中只有一個。很容易理解CurrentThread為什麼是靜態的——雖然有多個線程同時存在,但是在某一個時刻,CPU只能執行其中一個。
就像上面程序所演示的,我們通過Thread類來創建和控制線程。注意到程序的頭部,我們使用了如下命名空間:
using System;
using System.Threading;
在.Net framework class library中,所有與多線程機制應用相關的類都是放在System.Threading命名空間中的。其中提供Thread類用於創建線程,ThreadPool類用於管理線程池等等,此外還提供解決了線程執行安排,死鎖,線程間通訊等實際問題的機制。如果你想在你的應用程序中使用多線程,就必須包含這個類。Thread類有幾個至關重要的方法,描述如下:
Start():啟動線程
Sleep(int):靜態方法,暫停當前線程指定的毫秒數
Abort():通常使用該方法來終止一個線程
Suspend():該方法並不終止未完成的線程,它僅僅掛起線程,以後還可恢復。
Resume():恢復被Suspend()方法掛起的線程的執行