如果一個線程中某一個操作需要執行很長時間,而且很少需要用戶干預,則最好把這個任務作為進程的一個線程來運行,因為這樣可以為應用程序提供最好的響應性能,也能提高用戶的工作效率
名字空間System.Threading中提供了多線程程序設計需要的功能,包括線程的創建,啟動,停止以及多線程同步等,下面將先介紹Thread類以及如何使用它控制線程,接著介紹多線程同步技術
- Thread類
這個類以對象的方式封裝了特定AppDomain中給定的程序執行路徑,其中提供的方法可以用來從當前的線程創建新線程,掛起線程,停止和銷毀線程,下面是這個 類中核心的靜態成員:
CurrentThead---只讀屬性,指向當前運行的線程
AllocateNamedDataSlot,FreeNameDataSlot,GetNameDataSlot—用來操縱給定線程的線程局部存取(TLS)
Sleep—讓當前線程休眠特定的時間
GetDomain—返回當前線程所在的AppDomain;
GetDomainID—返回當前線程所在AppDomain的ID
些外,這個類還有以下實例成員:
IsAlive—判斷線程是否處於活動狀態
Name—線程的名稱
Priority—ThreadPriority枚舉類型,代表線程的優先級
ThreadState—ThreadState枚舉類型,代表線程的狀態
Start—啟動一個線程
Suspend—掛起一個線程
Resume—繼續掛起線程
Abort—結束一個線程的運行
Join—讓線程等待另外一個線程過期
Interrupt—打斷一個處於WaitSleepJoin狀態的線程
1.1.1線程的創建
創建線程是創建一個Thread類型的對象,Thread類的構造方法帶有一個TheadStart類型的參數,這是代表類型,相當於函數的指針,用於傳遞線程的入口方法
public Thread(System.Threading.ThreadStart start);
為了調用這個函數,首先需要一個ThreadStart的對象,創建這個方法需要一個靜態方法或實例方法作為參數,下面兩條語句分別創建了一個線程對象
Thread NewThread = new Thread(new ThreadStart(MyClass.StaticFun));
Thread NewThead = new Thread(new ThreadStart(new MyClass().InstanceFun));
線程的級別:用ThreadPriority屬性設置-newThread.Priority = ThreadPriority.Hehtest;
線程的啟動:newThread.Start();
線程的休眠:newThread.Sleep(10000) or newThread.Sleep(
new TimeSpan(0,0,0,1000));
線程的掛起:newThread.Suspend();
線程的繼續:newThread.Resume();
線程的終止:newThread.Abort();
下面是多線程實例