1. 應用程式中的線程把大部分的時間花費在等待狀態,等待某個事件發生,然後才能給予響應,這種情況下需要使用ThreadPool。
2. ThreadPool可以作為一個線程的容器,ThreadPool類也是一個靜態類,你不能也不必要產生它的對象,而且一旦使用該方法線上程池中添加了一個項目,那麼該項目將是沒有辦法取消的。在這裡你無需自己建立線程,只需把你要做的工作寫成函數,然後作為參數傳遞給ThreadPool.QueueUserWorkItem()方法就行了,傳遞的方法就是依靠WaitCallback代理對象,而線程的建立、管理、運行等等工作都是由系統自動完成的,你無須考慮那些複雜的細節問題。
3. ThreadPool.QueueUserWorkItem(WaitCallback,Object )方法一個重載可以通過傳遞一個object對象給線程,這樣我們在使用的時候就可以將一些重要訊息封裝後傳遞給線程。值得注意的是,傳遞給WaitCallback的參數的方法必須有一個Object的參數,不然會提示:“ThreadRun”的重載均與委託“System.Threading.WaitCallback”不匹配。代碼如下:
static void Main(string[] args)
{
//定義一個計數器
Program p = new Program();
WaitCallback wc = new WaitCallback(p.ThreadRun);
ThreadPool.QueueUserWorkItem(wc);
}
//定義一下線程執行的方法
public void ThreadRun(Object o)
{
//具體處理
}
補充一點:Interlocked.Increment(ref int)函數類似於將傳入的int變數放在lock關鍵字範圍內。代碼如下:
lock (this)
{
//計數器
count++;
}
類似於代碼:Interlocked.Increment(ref count),還有一個遞減的方法Interlocked.Decrement(ref int)