我正在尝试创建一个控制台应用程序来监听本地计算机上的消息队列。这是我到目前为止的代码..
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();
来防止这种情况发生,直到用户交互为止。
关于c# - 监听消息队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44929101/