使用无限超时查看 MSMQ 消息

Peek MSMQ message with infinite timeout


我正在编写一个应用程序来查看来自 Microsoft 消息队列 (MSMQ) 的消息。我希望我的应用程序依次查看 MSMQ 消息(从第一条消息到最后一条消息)。在完全查看最后一条消息后,主线程将被阻塞,直到 MSMQ 有新消息到达。
我写了一些代码,但有一个例外,解释如下:

Message ret = null;
Cursor cursor = mq.CreateCursor();
bool isTheFirst = true;
while (true) {
  if (isTheFirst) {
    ret = mq.Peek(new TimeSpan(Timeout.Infinite), cursor, PeekAction.Current);
    Console.WriteLine(ret.Id);
    isTheFirst = false;
  } else {
    // after my app peeks the last message completly, the peek method
   //throw an exception: "Timeout is expired!"
    ret = mq.Peek(new TimeSpan(Timeout.Infinite), cursor, PeekAction.Next);

    Console.WriteLine(ret.Id);
  }
  Thread.Sleep(1000);

}


谁能帮我解决这个问题。谢谢!

您应该使用 MessageQueue.InfiniteTimeout 而不是 Timeout.infinite。试试改成这个值

ret = mq.Peek(MessageQueue.InfiniteTimeout, cursor, PeekAction.Current);

值不一样

var timeout = MessageQueue.InfiniteTimeout; // {49.17:02:17.2950000}
var timeout2 = new TimeSpan(Timeout.Infinite); // {-00:00:00.0000001}

所以队列 Peek 的行为不同