MessageEnumerator Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit un curseur avant uniquement pour énumérer les messages dans une file d’attente de messages.
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
- Héritage
- Implémente
Exemples
L’exemple suivant obtient une liste dynamique des messages dans une file d’attente et compte tous les messages dont la Priority propriété est définie sur 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
Remarques
Utilisez pour l’interaction MessageEnumerator dynamique avec les messages dans une file d’attente. Les méthodes disponibles via la MessageQueue classe peuvent retourner un MessageEnumerator pointant vers une liste dynamique de messages dans la file d’attente, ou un tableau qui contient une copie à un instant donné (une instantané) de la file d’attente au moment où la méthode spécifiée a été appelée.
Contrairement à un instantané statique, un énumérateur vous permet de modifier la collection. À l’aide d’un MessageEnumerator, vous pouvez supprimer des messages de la file d’attente, et la modification est immédiatement répercutée dans la file d’attente.
Un énumérateur ne supprime pas les messages de la file d’attente lorsqu’il interroge la file d’attente. Il retourne des informations sur le message à la position actuelle du curseur, mais il laisse le message dans la file d’attente.
Un MessageEnumerator est un curseur initialisé en tête d’une liste dynamique. L’ordre de liste est identique à l’ordre des messages dans la file d’attente, en fonction de la priorité des messages. Vous pouvez déplacer le curseur vers le premier message de la file d’attente en appelant MoveNext. Une fois l’énumérateur initialisé, vous pouvez utiliser MoveNext pour parcourir les messages restants. Vous pouvez spécifier s’il faut attendre qu’un message soit disponible en passant un délai d’expiration dans la MoveNext méthode .
Étant donné que l’énumérateur est dynamique, un message ajouté au-delà de la position actuelle du curseur (par exemple, en raison d’une faible priorité) est accessible par l’énumérateur. Un message inséré avant la position actuelle du curseur n’est pas accessible. Il n’est pas possible de revenir en arrière avec un MessageEnumerator. Un curseur autorise le déplacement vers l’avant uniquement. La Reset méthode vous permet de replacer le curseur au début de la file d’attente.
Les instances de MessageEnumerator pour une file d’attente donnée fonctionnent indépendamment. Vous pouvez créer deux MessageEnumerator instances qui s’appliquent à la même file d’attente. Les modifications apportées MessageEnumerator aux messages dans la file d’attente sont immédiatement répercutées dans un deuxième énumérateur si le deuxième énumérateur est positionné avant le premier. Toutefois, si deux énumérateurs ont la même position et que l’un d’eux supprime le message à cette position, une exception est levée si l’autre énumérateur tente d’obtenir la valeur de la Current propriété sur le message maintenant supprimé.
Notes
Si vous créez un instance de MessageQueue avec MessageQueue.DenySharedReceive défini sur true
, aucune autre application ne peut modifier les messages dans votre énumérateur tant que vous disposez de la connexion à la file d’attente.
Propriétés
Current |
Obtient le Message actuel vers lequel cet énumérateur pointe. |
CursorHandle |
Obtient le handle de curseur Message Queuing natif utilisé pour parcourir les messages dans la file d'attente. |
Méthodes
Close() |
Libère les ressources associées à l'énumérateur. |
CreateObjRef(Type) |
Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant. (Hérité de MarshalByRefObject) |
Dispose() |
Libère toutes les ressources utilisées par MessageEnumerator. |
Dispose(Boolean) |
Libère les ressources non managées utilisées par MessageEnumerator et libère éventuellement les ressources managées. |
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
Finalize() |
Cette API prend en charge l'infrastructure du produit et n'est pas destinée à être utilisée directement à partir de votre code. Libère les ressources détenues par l'énumérateur. |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetLifetimeService() |
Obsolète.
Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance. (Hérité de MarshalByRefObject) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
InitializeLifetimeService() |
Obsolète.
Obtient un objet de service de durée de vie pour contrôler la stratégie de durée de vie de cette instance. (Hérité de MarshalByRefObject) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
MemberwiseClone(Boolean) |
Crée une copie superficielle de l'objet MarshalByRefObject actuel. (Hérité de MarshalByRefObject) |
MoveNext() |
Avance l'énumérateur jusqu'au message suivant dans la file d'attente, s'il y en a un de disponible. |
MoveNext(TimeSpan) |
Avance l'énumérateur jusqu'au message suivant de la file d'attente. Si l'énumérateur est placé à la fin de la file d'attente, MoveNext() attend qu'un message soit disponible ou que le délai spécifié expire. |
RemoveCurrent() |
Supprime le message en cours d'une file d'attente transactionnelle ou non et retourne le message à l'application appelante. Il n'y a pas de délai d'attente spécifié pour l'arrivée d'un message dans la file d'attente. |
RemoveCurrent(MessageQueueTransaction) |
Supprime le message en cours d'une file d'attente transactionnelle et retourne le message à l'application appelante. Il n'y a pas de délai d'attente spécifié pour l'arrivée d'un message dans la file d'attente. |
RemoveCurrent(MessageQueueTransactionType) |
Supprime le message en cours d'une file d'attente et retourne le message à l'application appelante. Il n'y a pas de délai d'attente spécifié pour l'arrivée d'un message dans la file d'attente. |
RemoveCurrent(TimeSpan) |
Supprime le message en cours de la file d'attente et retourne le message à l'application appelante. S'il y a un message à supprimer, le retour de la méthode est immédiat. Sinon, la méthode attend le délai spécifié pour l'arrivée d'un message. |
RemoveCurrent(TimeSpan, MessageQueueTransaction) |
Supprime le message en cours d'une file d'attente transactionnelle et retourne le message à l'application appelante. S'il y a un message à supprimer, le retour de la méthode est immédiat. Sinon, la méthode attend le délai spécifié pour l'arrivée d'un message. |
RemoveCurrent(TimeSpan, MessageQueueTransactionType) |
Supprime le message en cours d'une file d'attente et retourne le message à l'application appelante. S'il y a un message à supprimer, le retour de la méthode est immédiat. Sinon, la méthode attend le délai spécifié pour l'arrivée d'un message. |
Reset() |
Réinitialise l'énumérateur en cours, de manière à ce qu'il pointe vers le début de la file d'attente. |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |
Implémentations d’interfaces explicites
IEnumerator.Current |
Retourne Message qui référence le message à la position actuelle du curseur. |