MessageEnumerator MessageEnumerator MessageEnumerator MessageEnumerator Class

Определение

Предоставляет курсор, перемещающийся только в прямом направлении, для перечисления сообщений в очереди сообщений.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
Наследование
MessageEnumeratorMessageEnumeratorMessageEnumeratorMessageEnumerator
Реализации

Примеры

В следующем примере показано получение динамического списка сообщений в очереди и подсчет всех сообщений, для 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.

A 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 Current Current Current

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

CursorHandle CursorHandle CursorHandle CursorHandle

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

Методы

Close() Close() Close() Close()

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

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

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

(Inherited from MarshalByRefObject)
Dispose() Dispose() Dispose() Dispose()

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

Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

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

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

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

(Inherited from MarshalByRefObject)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

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

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

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

(Inherited from MarshalByRefObject)
MoveNext() MoveNext() MoveNext() MoveNext()

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

MoveNext(TimeSpan) MoveNext(TimeSpan) MoveNext(TimeSpan) 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() RemoveCurrent() RemoveCurrent() 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) RemoveCurrent(MessageQueueTransaction) RemoveCurrent(MessageQueueTransaction) 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) RemoveCurrent(MessageQueueTransactionType) RemoveCurrent(MessageQueueTransactionType) 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) RemoveCurrent(TimeSpan) RemoveCurrent(TimeSpan) 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) RemoveCurrent(TimeSpan, MessageQueueTransaction) RemoveCurrent(TimeSpan, MessageQueueTransaction) 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) RemoveCurrent(TimeSpan, MessageQueueTransactionType) RemoveCurrent(TimeSpan, MessageQueueTransactionType) 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() Reset() Reset() Reset()

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

ToString() ToString() ToString() ToString()

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

(Inherited from Object)

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

IEnumerator.Current IEnumerator.Current IEnumerator.Current IEnumerator.Current

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

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

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