监听消息队列

listen to message queue

我正在尝试创建一个控制台应用程序来侦听本地计算机上的消息队列。到目前为止,这是我的代码..

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 条消息,有时会读取所有消息。

这是怎么回事,我是不是做错了什么?

BeginReceive方法是asynchronous,所以不会阻止main()退出。

你可以做的就是在 main() 的末尾添加一个 Console.ReadKey(); 来防止这种情况,直到用户交互。