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


MessageEnumerator Класс

Определение

Предоставляет курсор последовательного доступа для перечисления сообщений в очереди сообщений.

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.

#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 для динамического взаимодействия с сообщениями в очереди. Методы, доступные MessageQueue в классе , могут возвращать либо MessageEnumerator динамический список сообщений в очереди, либо массив, содержащий копию в данный момент (snapshot) очереди на момент вызова указанного метода.

В отличие от статического snapshot перечислитель позволяет изменять коллекцию. MessageEnumeratorС помощью можно удалить сообщения из очереди, и изменения немедленно отражаются в очереди.

Перечислитель не удаляет сообщения из очереди при запросе очереди. Он возвращает сведения о сообщении в текущей позиции курсора, но оставляет сообщение в очереди.

MessageEnumerator это курсор, инициализируемый заголовком динамического списка. Порядок списка совпадает с порядком сообщений в очереди в соответствии с приоритетом сообщений. Вы можете переместить курсор к первому сообщению в очереди, вызвав .MoveNext После инициализации перечислителя можно использовать для MoveNext пошагового выполнения оставшихся сообщений. Вы можете указать, следует ли ждать появления сообщения, передав время ожидания в MoveNext метод .

Так как перечислитель является динамическим, перечислитель может получить доступ к сообщению, которое добавляется за пределами текущей позиции курсора (например, из-за низкого приоритета). Невозможно получить доступ к сообщению, вставленном до текущей позиции курсора. Невозможно выполнить шаг назад с помощью MessageEnumerator. Курсор позволяет перемещаться только вперед. Метод Reset позволяет поместить курсор обратно в начало очереди.

Экземпляры MessageEnumerator для заданной очереди работают независимо. Можно создать два MessageEnumerator экземпляра, которые применяются к одной очереди. Изменения, внесенные в MessageEnumerator сообщения в очереди, будут сразу же отражены во втором перечислителе, если второй перечислитель расположен перед первым. Однако если два перечислителя имеют одинаковую позицию и один из них удаляет сообщение в этой позиции, создается исключение, если другой перечислитель пытается получить значение Current свойства в удаленном сообщении.

Примечание

Если вы создаете экземпляр MessageQueue со MessageQueue.DenySharedReceive значением true, другое приложение не может изменять сообщения в перечислителе при наличии подключения к очереди.

Свойства

Current

Получает текущий объект Message, на который указывает перечислитель.

CursorHandle

Получает собственный дескриптор курсора Message Queuing, используемый для просмотра сообщений в очереди.

Методы

Close()

Освобождает ресурсы, связанные с перечислителем.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

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

Освобождает все ресурсы, занятые модулем MessageEnumerator.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом MessageEnumerator, а при необходимости освобождает также управляемые ресурсы.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

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

Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода.

Освобождает ресурсы, используемые перечислителем.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Устаревшие..

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

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

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

(Унаследовано от Object)
InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

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

Создает неполную копию текущего объекта Object.

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

Создает неполную копию текущего объекта MarshalByRefObject.

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

Перемещает перечислитель на следующее сообщение в очереди, если таковое в данный момент имеется.

MoveNext(TimeSpan)

Перемещает перечислитель на следующее сообщение в очереди. Если перечислитель установлен в конец очереди, метод MoveNext() ожидает до тех пор, пока не появится сообщение или же не истечет заданный тайм-аут.

RemoveCurrent()

Удаляет текущее сообщение из транзакционной или нетранзакционной очереди и возвращает сообщение в вызывающее приложение. Не указано время тайм-аута для прибытия сообщения в очередь.

RemoveCurrent(MessageQueueTransaction)

Удаляет текущее сообщение из транзакционной очереди и возвращает сообщение в вызывающее приложение. Не указано время тайм-аута для прибытия сообщения в очередь.

RemoveCurrent(MessageQueueTransactionType)

Удаляет текущее сообщение из очереди и возвращает сообщение в вызывающее приложение. Не указано время тайм-аута для прибытия сообщения в очередь.

RemoveCurrent(TimeSpan)

Удаляет текущее сообщение из очереди и возвращает сообщение в вызывающее приложение. Если имеется сообщение для удаления, этот метод возвращает его немедленно. В противном случае метод ожидает прихода нового сообщения в течение заданного времени тайм-аута.

RemoveCurrent(TimeSpan, MessageQueueTransaction)

Удаляет текущее сообщение из транзакционной очереди и возвращает сообщение в вызывающее приложение. Если имеется сообщение для удаления, этот метод возвращает его немедленно. В противном случае метод ожидает прихода нового сообщения в течение заданного времени тайм-аута.

RemoveCurrent(TimeSpan, MessageQueueTransactionType)

Удаляет текущее сообщение из очереди и возвращает сообщение в вызывающее приложение. Если имеется сообщение для удаления, этот метод возвращает его немедленно. В противном случае метод ожидает прихода нового сообщения в течение заданного времени тайм-аута.

Reset()

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

ToString()

Возвращает строку, представляющую текущий объект.

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

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

IEnumerator.Current

Возвращает объект Message, который ссылается на сообщение в текущей позиции курсора.

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

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