00001 using System; 00002 using System.Threading; 00003 using System.Collections; 00004 00005 namespace Common 00006 { 00010 public class MessageQueue : Queue 00011 { 00013 public MessageQueue() : base() {} 00014 00016 public virtual Message DequeueBlocking() { 00017 Message result; 00018 lock (this) { 00019 while (Count == 0) { 00020 Monitor.Wait(this); 00021 } 00022 result = (Message)Dequeue(); 00023 Monitor.Pulse(this); 00024 } 00025 return result; 00026 } 00027 00028 public virtual void EnqueueBlocking(Message msg) { 00029 lock(this) { 00030 base.Enqueue(msg); 00031 Monitor.Pulse(this); 00032 } 00033 } 00034 } 00035 }