C# 侦听消息队列

C# 侦听消息队列,c#,msmq,C#,Msmq,我正在尝试创建一个控制台应用程序,用于侦听本地计算机上的消息队列。这是到目前为止我的代码 static void Main(string[] args) { var _queue = new MessageQueue(@".\private$\testing"); _queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) }); _queu

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

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方法是,因此它不会阻止
main()
退出


您只需添加一个
Console.ReadKey()main()
的末尾添加code>以防止出现这种情况,直到用户交互为止。

谢谢!你救了我的命day@Servy我认为这不是重复的,这不是同一个问题。@Jimbot这是重复的,因为这是同一个问题。