MessageEnumerator Classe

Definição

Fornece um cursor apenas para a frente para enumerar através de mensagens numa 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 seguinte obtém uma lista dinâmica de mensagens numa 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

Observações

Usar MessageEnumerator para interação dinâmica com mensagens numa fila. Os métodos disponíveis através da MessageQueue classe podem devolver um MessageEnumerator apontamento para uma lista dinâmica de mensagens na fila, ou um array que contenha uma cópia num dado instante – um instantâneo – da fila no momento em que o método especificado foi chamado.

Ao contrário de um snapshot estático, um enumerador permite modificar a coleção. Usando um MessageEnumerator, podes remover mensagens da fila, e a alteração é imediatamente refletida na fila.

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

A MessageEnumerator é um cursor, inicializado na cabeça de uma lista dinâmica. A ordem da lista é a mesma que a ordem das mensagens na fila, de acordo com a prioridade das mensagens. Pode mover o cursor para a primeira mensagem da fila chamando MoveNext. Depois de o enumerador ser inicializado, pode usar MoveNext para avançar nas mensagens restantes. Pode especificar se deve esperar que uma mensagem fique disponível passando um timeout no MoveNext método.

Como o enumerador é dinâmico, uma mensagem que é adicionada para além da posição atual do cursor (por exemplo, devido a baixa prioridade) pode ser acedida pelo enumerador. Uma mensagem inserida antes da posição atual do cursor não pode ser acedida. Não é possível recuar com um MessageEnumerator. Um cursor permite movimento apenas para a frente. O Reset método permite-lhe colocar o cursor de volta no início da fila.

Instâncias de MessageEnumerator para uma dada fila funcionam de forma independente. Podes criar duas MessageEnumerator instâncias que se aplicam à mesma fila. As alterações MessageEnumerator feitas às mensagens na fila serão imediatamente refletidas num segundo enumerador se este estiver posicionado antes do primeiro. No entanto, se dois enumeradores tiverem a mesma posição e um deles remover a mensagem nessa posição, é lançada uma exceção se o outro enumerador tentar obter o valor da Current propriedade na mensagem agora eliminada.

Note

Se criares uma instância de MessageQueue com MessageQueue.DenySharedReceive definido como true, nenhuma outra aplicação pode modificar as mensagens no teu enumerador enquanto tiveres a ligação à fila.

Propriedades

Name Description
Current

Recebe a corrente Message para a qual este enumerador aponta.

CursorHandle

Obtém o handle nativo do cursor Message Queuing usado para navegar pelas mensagens na fila.

Métodos

Name Description
Close()

Liberta os recursos associados ao enumerador.

CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Liberta todos os recursos utilizados pelo MessageEnumerator.

Dispose(Boolean)

Liberta os recursos não geridos usados pelo MessageEnumerator e opcionalmente liberta os recursos geridos.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Esta API suporta a infraestrutura de produtos e não é pressuposta para ser utilizada diretamente a partir do seu código.

Liberta os recursos detidos pelo recenseador.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()
Obsoleto.

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
MoveNext()

Avança o enumerador para a próxima mensagem na fila, se houver uma 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, MoveNext() espera até que uma mensagem esteja disponível ou que o tempo limite expire.

RemoveCurrent()

Remove a mensagem atual de uma fila transacional ou não transacional e devolve a mensagem à aplicação que chama. Não é especificado um tempo limite para que uma mensagem chegue à fila.

RemoveCurrent(MessageQueueTransaction)

Remove a mensagem atual de uma fila transacional e devolve a mensagem à aplicação que chama. Não é especificado um tempo limite para que uma mensagem chegue à fila.

RemoveCurrent(MessageQueueTransactionType)

Remove a mensagem atual de uma fila e devolve a mensagem à aplicação que chama. Não é especificado um tempo limite para que uma mensagem chegue à fila.

RemoveCurrent(TimeSpan, MessageQueueTransaction)

Remove a mensagem atual de uma fila transacional e devolve a mensagem à aplicação que chama. Se houver uma mensagem a remover, o método devolve-a imediatamente. Caso contrário, o método aguarda o timeout especificado para que uma nova mensagem chegue.

RemoveCurrent(TimeSpan, MessageQueueTransactionType)

Remove a mensagem atual de uma fila e devolve a mensagem à aplicação que chama. Se houver uma mensagem a remover, o método devolve-a imediatamente. Caso contrário, o método aguarda o timeout especificado para que uma nova mensagem chegue.

RemoveCurrent(TimeSpan)

Remove a mensagem atual da fila e devolve a mensagem à aplicação que chama. Se houver uma mensagem a remover, o método devolve-a imediatamente. Caso contrário, o método aguarda o timeout especificado para que uma nova mensagem chegue.

Reset()

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

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Implementações de Interface Explícita

Name Description
IEnumerator.Current

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

Aplica-se a

Ver também