MessageEnumerator Classe

Definição

Fornece um cursor somente de avanço para enumerar por meio de mensagens em uma fila de mensagens.

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
Herança
MessageEnumerator
Implementações

Exemplos

O exemplo a seguir obtém uma lista dinâmica de mensagens em uma fila e conta todas as mensagens com a Priority propriedade definida como 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

Comentários

Use MessageEnumerator para interação dinâmica com mensagens em uma fila. Os métodos disponíveis por meio da MessageQueue classe podem retornar um MessageEnumerator apontamento para uma lista dinâmica de mensagens na fila ou uma matriz que contém uma cópia em um determinado instante - um instantâneo - da fila no momento em que o método especificado foi chamado.

Ao contrário de um instantâneo estático, um enumerador permite modificar a coleção. Usando um MessageEnumerator, você pode remover mensagens da fila e a alteração é refletida imediatamente na fila.

Um enumerador não remove as mensagens da fila quando consulta a fila. Ele retorna informações sobre a mensagem na posição atual do cursor, mas deixa a mensagem na fila.

Um MessageEnumerator cursor é inicializado para o cabeçalho de uma lista dinâmica. A ordem de lista é a mesma que a ordem das mensagens na fila, de acordo com a prioridade da mensagem. Você pode mover o cursor para a primeira mensagem na fila chamando MoveNext. Depois que o enumerador for inicializado, você poderá usar MoveNext para avançar nas mensagens restantes. Você pode especificar se deseja aguardar uma mensagem ficar disponível passando um tempo limite para o MoveNext método.

Como o enumerador é dinâmico, uma mensagem acrescentada além da posição atual do cursor (por exemplo, devido à baixa prioridade), pode ser acessada pelo enumerador. Uma mensagem inserida antes da posição atual do cursor não pode ser acessada. Não é possível retroceder com um MessageEnumerator. Um cursor permite a movimentação somente para frente. O Reset método permite que você coloque o cursor de volta no início da fila.

As instâncias de MessageEnumerator uma determinada fila funcionam de forma independente. Você pode criar duas MessageEnumerator instâncias que se aplicam à mesma fila. As alterações feitas MessageEnumerator nas mensagens na fila serão refletidas imediatamente em um segundo enumerador se o segundo enumerador estiver posicionado antes do primeiro. No entanto, se dois enumeradores tiverem a mesma posição e um deles remover a mensagem nessa posição, uma exceção será gerada se o outro enumerador tentar obter o valor da Current propriedade na mensagem agora excluída.

Observação

Se você criar uma instância com MessageQueue definido como true, nenhum outro aplicativo poderá modificar as mensagens em seu enumerador enquanto você tiver a conexão com MessageQueue.DenySharedReceive a fila.

Propriedades

Current

Obtém o Message atual para o qual este enumerador aponta.

CursorHandle

Obtém o cursor de Enfileiramento de Mensagens nativo usado para procurar mensagens na fila.

Métodos

Close()

Libera os recursos associados ao enumerador.

CreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Libera todos os recursos usados pelo MessageEnumerator.

Dispose(Boolean)

Libera os recursos não gerenciados usados pelo MessageEnumerator e opcionalmente libera os recursos gerenciados.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Esta API dá suporte à infraestrutura do produto e não deve ser usada diretamente do seu código.

Libera os recursos mantidos pelo enumerador.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()
Obsoleto.

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.

(Herdado de MarshalByRefObject)
MoveNext()

Avança o enumerador para a próxima mensagem na fila, se houver um disponível no momento.

MoveNext(TimeSpan)

Avança o enumerador para a próxima mensagem na fila. Se o enumerador estiver posicionado no final da fila, o MoveNext() aguardará até uma mensagem estar disponível ou o tempo limite determinado ser atingido.

RemoveCurrent()

Remove a mensagem atual de uma fila transacional ou não transacional e retorna a mensagem para o aplicativo de chamada. Não há nenhum tempo limite especificado para uma mensagem chegar na fila.

RemoveCurrent(MessageQueueTransaction)

Remove a mensagem atual de uma fila transacional e retorna a mensagem ao aplicativo de chamada. Não há nenhum tempo limite especificado para uma mensagem chegar na fila.

RemoveCurrent(MessageQueueTransactionType)

Remove a mensagem atual de uma fila e retorna a mensagem ao aplicativo de chamada. Não há nenhum tempo limite especificado para uma mensagem chegar na fila.

RemoveCurrent(TimeSpan)

Remove a mensagem atual da fila e retorna a mensagem para o aplicativo de chamada. Se houver uma mensagem a ser removida, o método a retornará imediatamente. Caso contrário, o método aguardará o tempo limite especificado para que uma nova mensagem chegue.

RemoveCurrent(TimeSpan, MessageQueueTransaction)

Remove a mensagem atual de uma fila transacional e retorna a mensagem ao aplicativo de chamada. Se houver uma mensagem a ser removida, o método a retornará imediatamente. Caso contrário, o método aguardará o tempo limite especificado para que uma nova mensagem chegue.

RemoveCurrent(TimeSpan, MessageQueueTransactionType)

Remove a mensagem atual de uma fila e retorna a mensagem ao aplicativo de chamada. Se houver uma mensagem a ser removida, o método a retornará imediatamente. Caso contrário, o método aguardará o tempo limite especificado para que uma nova mensagem chegue.

Reset()

Redefine o enumerador atual para que ele aponte para o início da fila.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

IEnumerator.Current

Retorna um Message que faz referência à mensagem na posição atual do cursor.

Aplica-se a

Confira também