class TestThread { static void Main() { //使用WaitHandle靜態方法阻止一個線程,直到一個或多個同步對象接收到信號 WaitHandle[] waitHandles = new WaitHandle[] { new ManualResetEvent(false), new ManualResetEvent(false) }; WaitCallback waitCallback = new WaitCallback(MyThreadWork); WaitCallback waitCallback2 = new WaitCallback(MyThreadWork2); // 增長線程工做類型 ThreadPool.QueueUserWorkItem(waitCallback, "第一個線程"); ThreadPool.QueueUserWorkItem(waitCallback, "第二個線程"); MyState myState = new MyState("第三個線程", 100, waitHandles[0]); // 增長自定義的線程參數類型 ThreadPool.QueueUserWorkItem(waitCallback2, myState); ThreadPool.QueueUserWorkItem(waitCallback2, new MyState("第四個線程", 2, waitHandles[1])); WaitHandle.WaitAll(waitHandles); Console.WriteLine("MyState 的 Number 值爲: {0}", myState.Number); // 讀取線程改變後的 MyState } public static void MyThreadWork(object state) { Console.WriteLine("MyThreadWork 開始啓動 …… {0}", (string)state); Thread.Sleep(1000); Console.WriteLine("運行結束…… {0}", (string)state); } // use MyState class public static void MyThreadWork2(object state) { MyState myState = ((MyState)state); Console.WriteLine("MyThreadWork2 開始啓動…… {0},{1}", ((MyState)state).Info, ((MyState)state).Number); Thread.Sleep(1000); ((MyState)state).Number += 1; // 將 state的 Number 加 1 Console.WriteLine("運行結束…… {0},{1}", ((MyState)state).Info, ((MyState)state).Number); ((ManualResetEvent)myState.DoneEvent).Set(); } } public class MyState { private string info; private int number; private WaitHandle _doneEvent; public MyState(string info, int number, WaitHandle doneEvent) { this.info = info; this.number = number; this._doneEvent = doneEvent; } public string Info { get { return this.info; } set { this.info = value; } } public WaitHandle DoneEvent { get { return this._doneEvent; } } public int Number { get { return this.number; } set { this.number = value; } } }