00001 using System; 00002 00003 namespace GPRSWeb.SmartDeviceClient.Common 00004 { 00008 public class MessageQueue : Queue 00009 { 00011 public MessageQueue() : base() {} 00012 00014 public Message DequeueNonBlocking() { 00015 return (Message)Dequeue(); 00016 } 00017 00018 public Message DequeueBlocking() { 00019 Message result; 00020 lock (SyncRoot) { 00021 while (Count == 0) { 00022 Monitor.Wait(SyncRoot); 00023 } 00024 result = DequeueNonBlocking(); 00025 } 00026 return result; 00027 } 00028 00029 public void EnqueueNonBlocking(Message msg) { 00030 Enqueue(msg); 00031 Monitor.PulseAll(SyncRoot); 00032 } 00033 00034 public void EnqueueBlocking(Message msg) { 00035 lock(SyncRoot) { 00036 EnqueueNonBlocking(msg); 00037 } 00038 } 00039 } 00040 }