我正在尝试创建一个监听本地计算机上的Message队列的控制台应用程序。到目前为止这是我的代码..
static void Main(string[] args)
{
var _queue = new MessageQueue(@".\private$\testing");
_queue.Formatter = new XmlMessageFormatter(new Type[] {
typeof(string) });
_queue.ReceiveCompleted += new
ReceiveCompletedEventHandler(queue_ReceiveCompleted);
_queue.BeginReceive();
}
private static void queue_ReceiveCompleted(object source,
ReceiveCompletedEventArgs e)
{
MessageQueue mq = (MessageQueue)source;
Message msg = mq.EndReceive(e.AsyncResult);
Console.WriteLine(msg.Body.ToString());
mq.BeginReceive();
}
我的问题是这样的..首先,程序在
之后立即退出 Console.WriteLine(msg.Body.ToString());
我不会在队列中收到其他消息。
所以我尝试了没有Console.WriteLine来查看是否从队列中读取了所有消息
private static void queue_ReceiveCompleted(object source,
ReceiveCompletedEventArgs e)
{
MessageQueue mq = (MessageQueue)source;
Message msg = mq.EndReceive(e.AsyncResult);
mq.BeginReceive();
}
但结果有些不一致,有时会读取1条消息4次,有时甚至全部。
所以最新情况如何,我做错了吗?
答案 0 :(得分:2)
BeginReceive
方法为asynchronous,因此不会阻止main()
退出。
您可以做的只是在Console.ReadKey();
的末尾添加main()
以阻止此操作,直到用户进行互动。