接收MSMQ消息的最佳方法是什么。
我使用了以下代码,但收到的MSMQ消息未在队列中删除
var msgEnumerator = myQueue.GetMessageEnumerator2();
var messages = new List<System.Messaging.Message>();
while (msgEnumerator.MoveNext(new TimeSpan(0, 0, 1)))
{
var msg = myQueue.ReceiveById(msgEnumerator.Current.Id, new TimeSpan(0, 0, 1));
messages.Add(msg);
for (int i = 0; i < messages.Capacity; i++)
{
String DataMessages = messages[i].ToString();
}
但是我无法收到消息。
如何接收这些讯息。
答案 0 :(得分:2)
我会使用异步MessageQueue.BeginPeek来开始侦听队列:
queue.BeginPeek();
然后使用MessageQueue.PeekCompleted事件注册处理程序:
queue.PeekCompleted += new PeekCompletedEventHandler(MessageHasBeenReceived);
然后在您的处理程序中使用MessageQueue.EndPeek来访问该消息。记得再次致电BeginPeek。
private void MessageHasBeenReceived(object sender, PeekCompletedEventArgs e)
{
// Get message
var msg = queue.EndPeek(e.AsyncResult);
// Do message processing here
....
// Remove message from queue
queue.ReceiveById(msg.Id);
// Listen for more messages
queue.BeginPeek();
}
请参阅此处了解MSDN示例。