MessageEnumerator Класс

Определение

Предоставляет курсор последовательного доступа для перечисления сообщений в очереди сообщений.Provides a forward-only cursor to enumerate through messages in a message queue.

public ref class MessageEnumerator : MarshalByRefObject, IDisposable, System::Collections::IEnumerator
public class MessageEnumerator : MarshalByRefObject, IDisposable, System.Collections.IEnumerator
type MessageEnumerator = class
    inherit MarshalByRefObject
    interface IEnumerator
    interface IDisposable
Public Class MessageEnumerator
Inherits MarshalByRefObject
Implements IDisposable, IEnumerator
Наследование
MessageEnumerator
Реализации

Примеры

В следующем примере показано получение динамического списка сообщений в очереди и подсчет всех сообщений со свойством Priority, для которого задано значение MessagePriority.Lowest.The following example gets a dynamic list of messages in a queue and counts all messages with the Priority property set to MessagePriority.Lowest.

#using <system.dll>
#using <system.messaging.dll>

using namespace System;
using namespace System::Messaging;
ref class MyNewQueue
{
public:
   void CountLowestPriority()
   {
      
      // Holds the count of Lowest priority messages.
      UInt32 numberItems = 0;
      
      // Connect to a queue.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
      
      // Get a cursor into the messages in the queue.
      MessageEnumerator^ myEnumerator = myQueue->GetMessageEnumerator();
      
      // Specify that the messages's priority should be read.
      myQueue->MessageReadPropertyFilter->Priority = true;
      
      // Move to the next message and examine its priority.
      while ( myEnumerator->MoveNext() )
      {
         
         // Increase the count if priority is Lowest.
         if ( myEnumerator->Current->Priority == MessagePriority::Lowest )
                  numberItems++;
      }

      
      // Display final count.
      Console::WriteLine( "Lowest priority messages: {0}", numberItems );
      return;
   }

};

int main()
{
   
   // Create a new instance of the class.
   MyNewQueue^ myNewQueue = gcnew MyNewQueue;
   
   // Output the count of Lowest priority messages.
   myNewQueue->CountLowestPriority();
   return 0;
}

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 uses a cursor to step through the
        // messages in a queue and counts the number of
        // Lowest priority messages.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Output the count of Lowest priority messages.
            myNewQueue.CountLowestPriority();
                        
            return;
        }

        //**************************************************
        // Iterates through messages in a queue and examines
        // their priority.
        //**************************************************
        
        public void CountLowestPriority()
        {
            // Holds the count of Lowest priority messages.
            uint numberItems = 0;

            // Connect to a queue.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");
    
            // Get a cursor into the messages in the queue.
            MessageEnumerator myEnumerator =
                myQueue.GetMessageEnumerator();

            // Specify that the messages's priority should be read.
            myQueue.MessageReadPropertyFilter.Priority = true;

            // Move to the next message and examine its priority.
            while(myEnumerator.MoveNext())
            {
                // Increase the count if priority is Lowest.
                if(myEnumerator.Current.Priority ==
                    MessagePriority.Lowest)
                    
                    numberItems++;
            }

            // Display final count.
            Console.WriteLine("Lowest priority messages: " +
                numberItems.ToString());
            
            return;
        }
    }
}
Imports System.Messaging

Public Class MyNewQueue


        
        ' Provides an entry point into the application.
        '		 
        ' This example uses a cursor to step through the
        ' messages in a queue and counts the number of 
        ' Lowest priority messages.
        

        Public Shared Sub Main()

            ' Create a new instance of the class.
            Dim myNewQueue As New MyNewQueue()

            ' Output the count of Lowest priority messages.
            myNewQueue.CountLowestPriority()

            Return

        End Sub


        
        ' Iterates through messages in a queue and examines
        ' their priority.
        

        Public Sub CountLowestPriority()

            ' Holds the count of Lowest priority messages.
            Dim numberItems As Int32 = 0

            ' Connect to a queue.
            Dim myQueue As New MessageQueue(".\myQueue")

            ' Get a cursor into the messages in the queue.
            Dim myEnumerator As MessageEnumerator = _
                myQueue.GetMessageEnumerator()

            ' Specify that the messages's priority should be read.
            myQueue.MessageReadPropertyFilter.Priority = True

            ' Move to the next message and examine its priority.
            While myEnumerator.MoveNext()

                ' Increase the count if the priority is Lowest.
                If myEnumerator.Current.Priority = _
                    MessagePriority.Lowest Then
                    numberItems += 1
                End If

            End While

            ' Display final count.
            Console.WriteLine(("Lowest priority messages: " + _
                numberItems.ToString()))

            Return

        End Sub

End Class

Комментарии

Используйте MessageEnumerator для динамического взаимодействия с сообщениями в очереди.Use MessageEnumerator for dynamic interaction with messages in a queue. Методы, доступные через класс MessageQueue, могут возвращать MessageEnumerator, указывающий на динамический список сообщений в очереди, или массив, содержащий копию в заданном мгновенном снимке очереди на момент вызова указанного метода.Methods available through the MessageQueue class can return either a MessageEnumerator pointing to a dynamic list of messages in the queue, or an array that contains a copy at a given instant - a snapshot - of the queue at the time the specified method was called.

В отличие от статического моментального снимка, перечислитель позволяет изменить коллекцию.Unlike a static snapshot, an enumerator allows you to modify the collection. С помощью MessageEnumeratorможно удалять сообщения из очереди, и изменение немедленно отражается в очереди.Using a MessageEnumerator, you can remove messages from the queue, and the change is immediately reflected in the queue.

Перечислитель не удаляет сообщения из очереди при запросе очереди.An enumerator does not remove the messages from the queue when it queries the queue. Он возвращает сведения о сообщении в текущей позиции курсора, но оставляет сообщение в очереди.It returns information about the message at the current cursor position, but it leaves the message in the queue.

MessageEnumerator — это курсор, инициализированный в заголовке динамического списка.A MessageEnumerator is a cursor, initialized to the head of a dynamic list. Порядок в списке совпадает с порядком сообщений в очереди в соответствии с приоритетом сообщения.The list order is the same as the order of the messages in the queue, according to message priority. Курсор можно переместить в первое сообщение в очереди, вызвав MoveNext.You can move the cursor to the first message in the queue by calling MoveNext. После инициализации перечислителя можно использовать MoveNext для прохода по оставшимся сообщениям.After the enumerator has been initialized, you can use MoveNext to step forward through the remaining messages. Можно указать, следует ли дождаться, пока сообщение станет доступным, передав методу MoveNext время ожидания.You can specify whether to wait for a message to become available by passing a timeout into the MoveNext method.

Так как перечислитель является динамическим, сообщение, добавляемое за пределы текущей позиции курсора (например, из-за низкого приоритета), может быть получено перечислителем.Because the enumerator is dynamic, a message that is appended beyond the cursor's current position (for example, due to low priority), can be accessed by the enumerator. Не удается получить доступ к сообщению, вставленному до текущей позиции курсора.A message that is inserted before the cursor's current position cannot be accessed. Невозможно выполнить шаг назад с помощью MessageEnumerator.It is not possible to step backward with a MessageEnumerator. Курсор позволяет перемещаться только вперед.A cursor allows forward-only movement. Метод Reset позволяет поместить курсор обратно в начало очереди.The Reset method enables you to place the cursor back at the beginning of the queue.

Экземпляры MessageEnumerator для заданной очереди работают независимо друг от друга.Instances of MessageEnumerator for a given queue work independently. Можно создать два экземпляра MessageEnumerator, которые применяются к одной и той же очереди.You can create two MessageEnumerator instances that apply to the same queue. Изменения, вносимые одним MessageEnumerator в сообщения в очереди, будут немедленно отражены во втором перечислителе, если второй перечислитель расположен перед первым.The changes that one MessageEnumerator makes to the messages in the queue will be reflected immediately in a second enumerator if the second enumerator is positioned before the first. Однако если два перечислителей имеют одинаковое расположение и один из них удаляет сообщение в этой позиции, возникает исключение, если другой перечислитель попытается получить значение свойства Current в сообщении, которое уже было удалено.However, if two enumerators have the same position and one of them removes the message at that position, an exception is thrown if the other enumerator attempts to get the value of the Current property on the now-deleted message.

Примечание

При создании экземпляра MessageQueue с MessageQueue.DenySharedReceive, для которого задано значение true, другие приложения не могут изменять сообщения в перечислителе при наличии подключения к очереди.If you create an instance of MessageQueue with MessageQueue.DenySharedReceive set to true, no other application can modify the messages in your enumerator while you have the connection to the queue.

Свойства

Current

Получает текущий объект Message, на который указывает перечислитель.Gets the current Message that this enumerator points to.

CursorHandle

Получает собственный дескриптор курсора Message Queuing, используемый для просмотра сообщений в очереди.Gets the native Message Queuing cursor handle used to browse messages in the queue.

Методы

Close()

Освобождает ресурсы, связанные с перечислителем.Frees the resources associated with the enumerator.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Унаследовано от MarshalByRefObject)
Dispose()

Освобождает все ресурсы, используемые MessageEnumerator.Releases all resources used by the MessageEnumerator.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые MessageEnumerator, и дополнительно освобождает управляемые ресурсы.Releases the unmanaged resources used by the MessageEnumerator and optionally releases the managed resources.

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
Finalize()

Освобождает ресурсы, используемые перечислителем.Releases the resources held by the enumerator.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetLifetimeService()

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Унаследовано от MarshalByRefObject)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
InitializeLifetimeService()

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.Obtains a lifetime service object to control the lifetime policy for this instance.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.Creates a shallow copy of the current MarshalByRefObject object.

(Унаследовано от MarshalByRefObject)
MoveNext()

Перемещает перечислитель на следующее сообщение в очереди, если таковое в данный момент имеется.Advances the enumerator to the next message in the queue, if one is currently available.

MoveNext(TimeSpan)

Перемещает перечислитель на следующее сообщение в очереди.Advances the enumerator to the next message in the queue. Если перечислитель установлен в конец очереди, метод MoveNext() ожидает до тех пор, пока не появится сообщение или же не истечет заданный тайм-аут.If the enumerator is positioned at the end of the queue, MoveNext() waits until a message is available or the given timeout expires.

RemoveCurrent()

Удаляет текущее сообщение из транзакционной или нетранзакционной очереди и возвращает сообщение в вызывающее приложение.Removes the current message from a transactional or non-transactional queue and returns the message to the calling application. Не указано время тайм-аута для прибытия сообщения в очередь.There is no timeout specified for a message to arrive in the queue.

RemoveCurrent(MessageQueueTransaction)

Удаляет текущее сообщение из транзакционной очереди и возвращает сообщение в вызывающее приложение.Removes the current message from a transactional queue and returns the message to the calling application. Не указано время тайм-аута для прибытия сообщения в очередь.There is no timeout specified for a message to arrive in the queue.

RemoveCurrent(MessageQueueTransactionType)

Удаляет текущее сообщение из очереди и возвращает сообщение в вызывающее приложение.Removes the current message from a queue and returns the message to the calling application. Не указано время тайм-аута для прибытия сообщения в очередь.There is no timeout specified for a message to arrive in the queue.

RemoveCurrent(TimeSpan)

Удаляет текущее сообщение из очереди и возвращает сообщение в вызывающее приложение.Removes the current message from the queue and returns the message to the calling application. Если имеется сообщение для удаления, этот метод возвращает его немедленно.If there is a message to remove, the method returns it immediately. В противном случае метод ожидает прихода нового сообщения в течение заданного времени тайм-аута.Otherwise, the method waits the specified timeout for a new message to arrive.

RemoveCurrent(TimeSpan, MessageQueueTransaction)

Удаляет текущее сообщение из транзакционной очереди и возвращает сообщение в вызывающее приложение.Removes the current message from a transactional queue and returns the message to the calling application. Если имеется сообщение для удаления, этот метод возвращает его немедленно.If there is a message to remove, the method returns it immediately. В противном случае метод ожидает прихода нового сообщения в течение заданного времени тайм-аута.Otherwise, the method waits the specified timeout for a new message to arrive.

RemoveCurrent(TimeSpan, MessageQueueTransactionType)

Удаляет текущее сообщение из очереди и возвращает сообщение в вызывающее приложение.Removes the current message from a queue and returns the message to the calling application. Если имеется сообщение для удаления, этот метод возвращает его немедленно.If there is a message to remove, the method returns it immediately. В противном случае метод ожидает прихода нового сообщения в течение заданного времени тайм-аута.Otherwise, the method waits the specified timeout for a new message to arrive.

Reset()

Сбрасывает текущий перечислитель, теперь он указывает на заголовок очереди.Resets the current enumerator so it points to the head of the queue.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Явные реализации интерфейса

IEnumerator.Current

Возвращает объект Message, который ссылается на сообщение в текущей позиции курсора.Returns a Message that references the message at the current cursor position.

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

Дополнительно