2


我正在编写一个从 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);

}


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

4

1 回答 1

4

您应该使用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行为不同

于 2015-03-18T10:25:21.527 回答