使用无限超时查看 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
的行为不同
我正在编写一个应用程序来查看来自 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
的行为不同