Compartir vía


MessageEnumerator Clase

Definición

Ofrece un cursor de solo avance para enumerar los mensajes de una cola de mensajes.

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
Herencia
MessageEnumerator
Implementaciones

Ejemplos

En el ejemplo siguiente se obtiene una lista dinámica de mensajes de una cola y se cuentan todos los mensajes con la Priority propiedad establecida en 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

Comentarios

Se usa MessageEnumerator para la interacción dinámica con los mensajes de una cola. Los métodos disponibles a través de la MessageQueue clase pueden devolver un que MessageEnumerator apunte a una lista dinámica de mensajes de la cola o una matriz que contenga una copia en un instante determinado ( una instantánea) de la cola en el momento en que se llamó al método especificado.

A diferencia de una instantánea estática, un enumerador permite modificar la colección. Con , MessageEnumeratorpuede quitar los mensajes de la cola y el cambio se refleja inmediatamente en la cola.

Un enumerador no quita los mensajes de la cola cuando consulta la cola. Devuelve información sobre el mensaje en la posición actual del cursor, pero deja el mensaje en la cola.

Un MessageEnumerator es un cursor, inicializado en el encabezado de una lista dinámica. El orden de lista es el mismo que el orden de los mensajes de la cola, según la prioridad del mensaje. Puede mover el cursor al primer mensaje de la cola llamando a MoveNext. Una vez inicializado el enumerador, puede usar MoveNext para avanzar paso a paso por los mensajes restantes. Puede especificar si desea esperar a que un mensaje esté disponible pasando un tiempo de espera al MoveNext método .

Dado que el enumerador es dinámico, el enumerador puede tener acceso a un mensaje que se anexa más allá de la posición actual del cursor (por ejemplo, debido a una prioridad baja). No se puede tener acceso a un mensaje que se inserta antes de que no se pueda acceder a la posición actual del cursor. No es posible retroceder hacia atrás con .MessageEnumerator Un cursor permite el movimiento de solo avance. El Reset método permite volver a colocar el cursor al principio de la cola.

Las instancias de MessageEnumerator para una cola determinada funcionan de forma independiente. Puede crear dos MessageEnumerator instancias que se apliquen a la misma cola. Los cambios que realiza uno MessageEnumerator en los mensajes de la cola se reflejarán inmediatamente en un segundo enumerador si el segundo enumerador se coloca antes del primero. Sin embargo, si dos enumeradores tienen la misma posición y uno de ellos quita el mensaje en esa posición, se produce una excepción si el otro enumerador intenta obtener el valor de la Current propiedad en el mensaje eliminado ahora.

Nota

Si crea una instancia de MessageQueue con MessageQueue.DenySharedReceive establecida en true, ninguna otra aplicación puede modificar los mensajes del enumerador mientras tiene la conexión a la cola.

Propiedades

Current

Obtiene el Message actual al que apunta este enumerador.

CursorHandle

Obtiene el indicador de cursor de Message Queuing nativo que se utiliza para explorar los mensajes de la cola.

Métodos

Close()

Libera los recursos asociados al enumerador.

CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
Dispose()

Libera todos los recursos que usa MessageEnumerator.

Dispose(Boolean)

Libera los recursos no administrados que usa MessageEnumerator y, de forma opcional, libera los recursos administrados.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
Finalize()

Esta API admite la infraestructura de producto y no está pensada para usarse directamente en el código.

Libera los recursos mantenidos por el enumerador.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.

(Heredado de MarshalByRefObject)
MoveNext()

Desplaza el enumerador al siguiente mensaje de la cola si hay alguno disponible.

MoveNext(TimeSpan)

Desplaza el enumerador al siguiente mensaje de la cola. Si el enumerador se coloca al final de la cola, MoveNext() espera hasta que haya un mensaje disponible o expire el tiempo de espera.

RemoveCurrent()

Quita el mensaje actual de una cola transaccional o no transaccional y lo devuelve a la aplicación que realiza la llamada. No hay un tiempo de espera determinado para que un mensaje llegue a la cola.

RemoveCurrent(MessageQueueTransaction)

Quita el mensaje actual de una cola transaccional y devuelve el mensaje a la aplicación que realiza la llamada. No hay un tiempo de espera determinado para que un mensaje llegue a la cola.

RemoveCurrent(MessageQueueTransactionType)

Quita el mensaje actual de una cola y lo devuelve a la aplicación que realiza la llamada. No hay un tiempo de espera determinado para que un mensaje llegue a la cola.

RemoveCurrent(TimeSpan)

Quita el mensaje actual de la cola y lo devuelve a la aplicación que realiza la llamada. Si hay un mensaje que quitar, el método lo devuelve inmediatamente. En caso contrario, el método espera el tiempo de espera especificado hasta que llegue un mensaje nuevo.

RemoveCurrent(TimeSpan, MessageQueueTransaction)

Quita el mensaje actual de una cola transaccional y devuelve el mensaje a la aplicación que realiza la llamada. Si hay un mensaje que quitar, el método lo devuelve inmediatamente. En caso contrario, el método espera el tiempo de espera especificado hasta que llegue un mensaje nuevo.

RemoveCurrent(TimeSpan, MessageQueueTransactionType)

Quita el mensaje actual de una cola y lo devuelve a la aplicación que realiza la llamada. Si hay un mensaje que quitar, el método lo devuelve inmediatamente. En caso contrario, el método espera el tiempo de espera especificado hasta que llegue un mensaje nuevo.

Reset()

Restablece el enumerador actual de forma que señale al encabezado de la cola.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

IEnumerator.Current

Devuelve una Message que hace referencia al mensaje de la posición actual del cursor.

Se aplica a

Consulte también