首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听消息队列

侦听消息队列
EN

Stack Overflow用户
提问于 2017-07-05 14:31:05
回答 1查看 1.4K关注 0票数 2

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

代码语言:javascript
复制
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();
    }

我的问题是这样..。首先,程序就在后面退出。

代码语言:javascript
复制
        Console.WriteLine(msg.Body.ToString());

而我在队列中没有收到其他信息。

因此,我尝试不使用Console.WriteLine来查看是否从队列中读取所有消息。

代码语言:javascript
复制
private static void queue_ReceiveCompleted(object source, 
         ReceiveCompletedEventArgs e)
    {
        MessageQueue mq = (MessageQueue)source;
        Message msg = mq.EndReceive(e.AsyncResult);
        mq.BeginReceive();
    }

但结果是不一致的,有时它会读取1条消息,有些是4倍,有时是全部。

怎么了,我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 14:41:05

BeginReceive方法是异步,因此它不会阻止main()退出。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44929101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档