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
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 'Main


        
        ' 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 'CountLowestPriority

End Class 'MyNewQueue

Комментарии

Используйте 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 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.

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

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