我在C#中有一个控制台应用程序,我试图从消息队列中接收消息,直到消息队列为空。像这样,
MessageQueue queue = new MessageQueue();
While(queue.notempty)
{
queue.receive(...)
}
我该怎么做?
谢谢。
无法检查队列是否为空。您必须以这种方式接收它:
private Message Receive(MessageQueue queue)
{
try
{
return queue.Receive(TimeSpan.Zero);
}
catch (MessageQueueException mqe)
{
if (mqe.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
return null;
throw;
}
}
然后您可以做
MessageQueue queue = new MessageQueue();
Message msg;
while( (msg = Receive(queue)) != null)
{
//process
}
如果您在C#中执行此操作,则Queue<T>
类应该起作用:
Queue<T>
如果您打算从多个线程填充队列,则可以考虑改用Queue<Message> queue = GetMessageQueue();
while(queue.Count > 0)
{
Message message = queue.Dequeue();
// process message
}
(或ConcurrentQueue<T>
)。
如果您将ConcurrentQueue<T>
类用于MSMQ,则始终可以使用:
BlockingCollection<T>