我在c#中有一个控制台应用程序,我试图从消息队列接收消息,直到消息队列为空。所以类似的,消息队列循环
MessageQueue queue = new MessageQueue();
While(queue.notempty)
{
queue.receive(...)
}
我该怎么做?
谢谢。
我在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<Message> queue = GetMessageQueue();
while(queue.Count > 0)
{
Message message = queue.Dequeue();
// process message
}
如果您打算填充从多个线程队列中,你可以考虑使用ConcurrentQueue<T>
(或BlockingCollection<T>
)来代替。
如果您使用的是MessageQueue类MSMQ,您可以随时使用:
MessageQueue queue = ...
TimeSpan timeout = TimeSpan.FromMilliseconds(100); // Small timeout - can be very small
Message message = queue.Receive(timeout);
while (message != null)
{
// Process message...
message = queue.Receive(timeout);
}
他是关于不同的主题:MSMQ – Andrey 2011-03-17 18:37:34
@Andrey:为了以防万一(不清楚),我已更新,以包括它:) – 2011-03-17 18:47:52
你的意思是MSMQ或其他类型的消息队列? – BrokenGlass 2011-03-17 18:31:31