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


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
Реализации

Примеры

Следующий пример получает динамический список сообщений в очереди и подсчитывает все сообщения с заданным MessagePriority.LowestсвойствомPriority.

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

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

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

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

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

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

Замечание

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

Свойства

Имя Описание
Current

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

CursorHandle

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

Методы

Имя Описание
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, MessageQueueTransaction)

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

RemoveCurrent(TimeSpan, MessageQueueTransactionType)

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

RemoveCurrent(TimeSpan)

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

Reset()

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

ToString()

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

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

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

Имя Описание
IEnumerator.Current

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

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

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