Это пример класса, который запускается на консоли и асинхронно читает очередь.Это самый безопасный и быстрый способ сделать это.Однако обратите внимание, что в зависимости от того, где вы работаете, вам все равно понадобится какой-то механизм блокировки, если вы делаете такие вещи, как обновление текстовых полей с телом сообщения или что-то в этом роде.
public sealed class ConsoleSurrogate {
MessageQueue _mq = null;
public override void Main(string[] args) {
_mq = new MessageQueue(@".\private$\my_queue", QueueAccessMode.Receive);
_mq.ReceiveCompleted += new ReceiveCompletedEventHandler(_mq_ReceiveCompleted);
_mq.Formatter = new ActiveXMessageFormatter();
MessagePropertyFilter filter = new MessagePropertyFilter();
filter.Label = true;
filter.Body = true;
filter.AppSpecific = true;
_mq.MessageReadPropertyFilter = filter;
this.DoReceive();
Console.ReadLine();
_mq.Close();
}
void _mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e) {
_mq.EndReceive(e.AsyncResult);
Console.WriteLine(e.Message.Body);
this.DoReceive();
}
private void DoReceive() {
_mq.BeginReceive();
}
}