Прочитать на английском

Поделиться через


MessageQueue.ReceiveCompleted Событие

Определение

Происходит, если сообщение было удалено из очереди. Это событие инициируется асинхронной операцией, BeginReceive().

[System.Messaging.MessagingDescription("MQ_ReceiveCompleted")]
public event System.Messaging.ReceiveCompletedEventHandler ReceiveCompleted;

Тип события

Атрибуты

Примеры

В следующем примере кода создается обработчик событий с именем MyReceiveCompleted, присоединяется к ReceiveCompleted делегату обработчика событий и вызывается BeginReceive для запуска асинхронной операции получения в очереди, расположенной по пути .\myQueue. ReceiveCompleted При возникновении события пример получает сообщение и записывает его текст на экран. Затем в примере снова вызывается BeginReceive для запуска новой асинхронной операции получения.

using System;
using System.Messaging;

namespace MyProject
{
    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //		
        // This example performs asynchronous receive operation
        // processing.
        //**************************************************

        public static void Main()
        {
            // Create an instance of MessageQueue. Set its formatter.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(String)});

            // Add an event handler for the ReceiveCompleted event.
            myQueue.ReceiveCompleted += new
                ReceiveCompletedEventHandler(MyReceiveCompleted);
            
            // Begin the asynchronous receive operation.
            myQueue.BeginReceive();
            
            // Do other work on the current thread.

            return;
        }

        //**************************************************
        // Provides an event handler for the ReceiveCompleted
        // event.
        //**************************************************
        
        private static void MyReceiveCompleted(Object source,
            ReceiveCompletedEventArgs asyncResult)
        {
            // Connect to the queue.
            MessageQueue mq = (MessageQueue)source;

            // End the asynchronous Receive operation.
            Message m = mq.EndReceive(asyncResult.AsyncResult);

            // Display message information on the screen.
            Console.WriteLine("Message: " + (string)m.Body);

            // Restart the asynchronous Receive operation.
            mq.BeginReceive();
            
            return;
        }
    }
}

Комментарии

BeginReceive используется в асинхронной обработке ReceiveCompleted для создания события, когда сообщение доступно в очереди.

EndReceive(IAsyncResult) используется для завершения операции, инициированной вызовом BeginReceive и просмотром сообщения при возникновении ReceiveCompleted события.

При создании делегата ReceiveCompletedEventHandler необходимо указать метод, обрабатывающий событие. Чтобы связать событие с обработчиком событий, нужно добавить в событие экземпляр делегата. Обработчик событий вызывается всякий раз, когда происходит событие, если делегат не удален. Дополнительные сведения о делегатах обработчика событий см. в разделе Обработка и вызов событий.

Применяется к

Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

См. также раздел