窥视具有无限超时的MSMQ消息

时间:2015-03-18 08:27:19

标签: c# msmq peekmessage


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

}


任何人都可以帮我解决这个问题。谢谢!

1 个答案:

答案 0 :(得分: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的行为方式不同