我正在尝试创建一个控制台应用程序来侦听本地计算机上的消息队列。到目前为止这是我的密码。
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倍,有时是全部。
怎么了,我做错什么了吗?
发布于 2017-07-05 14:41:05
BeginReceive方法是异步,因此它不会阻止main()退出。
您可以做的就是在Console.ReadKey();的末尾添加一个main()来防止这种情况,直到用户交互为止。
https://stackoverflow.com/questions/44929101
复制相似问题