public void EnqueueItem (Action item) { lock (_locker) { _itemQ.Enqueue (item); // We must pulse because we're Monitor.Pulse (_locker); // changing a blocking condition. } }
Action item; lock (_locker) { while (_itemQ.Count == 0) Monitor.Wait (_locker); item = _itemQ.Dequeue(); } if (item == null) return; // This signals our exit item();
http://www.albahari.com/threading/part4.aspx
http://www.c-sharpcorner.com/UploadFile/1d42da/wait-and-pulse-method-in-threading-C-Sharp/
執行緒共用一個物件,輪流執行命令