听取消息队列

时间:2017-07-05 14:31:05

标签: c# msmq

我正在尝试创建一个监听本地计算机上的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次,有时甚至全部。

所以最新情况如何,我做错了吗?

1 个答案:

答案 0 :(得分:2)

BeginReceive方法为asynchronous,因此不会阻止main()退出。

您可以做的只是在Console.ReadKey();的末尾添加main()以阻止此操作,直到用户进行互动。