Lire en anglais

Partager via


MessageQueue.Peek Méthode

Définition

Retourne une copie du premier message dans la file d'attente, sans supprimer le message de la file.

Surcharges

Peek()

Retourne (lit) le premier message figurant dans la file d'attente référencée par ce MessageQueue sans le supprimer. La méthode Peek() étant synchrone, elle bloque le thread en cours jusqu'à ce qu'un message soit disponible.

Peek(TimeSpan)

Retourne (lit) le premier message figurant dans la file d'attente référencée par ce MessageQueue sans le supprimer. La méthode Peek() étant synchrone, elle bloque le thread en cours jusqu'à ce qu'un message soit disponible ou que le délai spécifié expire.

Peek(TimeSpan, Cursor, PeekAction)

Retourne (lit) le message actuel ou le message suivant de la file d'attente sans le supprimer, à l'aide du curseur spécifié. La méthode Peek() étant synchrone, elle bloque le thread en cours jusqu'à ce qu'un message soit disponible ou que le délai spécifié expire.

Peek()

Retourne (lit) le premier message figurant dans la file d'attente référencée par ce MessageQueue sans le supprimer. La méthode Peek() étant synchrone, elle bloque le thread en cours jusqu'à ce qu'un message soit disponible.

C#
public System.Messaging.Message Peek ();

Retours

Message représentant le premier message dans la file d'attente.

Exceptions

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Exemples

Les exemples suivants utilisent la Peek méthode sur une file d’attente.

Dans le premier exemple, l’application attend qu’un message soit disponible dans la file d’attente. Notez que le premier exemple n’accède pas au message qui arrive ; il interrompt simplement le traitement jusqu’à ce qu’un message arrive. Si un message existe déjà dans la file d’attente, il retourne immédiatement.

Dans le deuxième exemple, un message qui contient une classe définie par Order l’application est envoyé à la file d’attente, puis aperçu à partir de la file d’attente.

C#
using System;
using System.Messaging;

namespace MyProject
{

    // This class represents an object the following example
    // sends to a queue and receives from a queue.
    public class Order
    {
        public int orderId;
        public DateTime orderTime;
    };	

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //		
        // This example posts a notification that a message
        // has arrived in a queue. It sends a message
        // containing an other to a separate queue, and then
        // peeks the first message in the queue.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Wait for a message to arrive in the queue.
            myNewQueue.NotifyArrived();

            // Send a message to a queue.
            myNewQueue.SendMessage();	

            // Peek the first message in the queue.
            myNewQueue.PeekFirstMessage();
                        
            return;
        }

        //**************************************************
        // Posts a notification when a message arrives in
        // the queue "monitoredQueue". Does not retrieve any
        // message information when peeking the message.
        //**************************************************
        
        public void NotifyArrived()
        {

            // Connect to a queue.
            MessageQueue myQueue = new
                MessageQueue(".\\monitoredQueue");
    
            // Specify to retrieve no message information.
            myQueue.MessageReadPropertyFilter.ClearAll();

            // Wait for a message to arrive.
            Message emptyMessage = myQueue.Peek();

            // Post a notification when a message arrives.
            Console.WriteLine("A message has arrived in the queue.");

            return;
        }

        //**************************************************
        // Sends an Order to a queue.
        //**************************************************
        
        public void SendMessage()
        {
            
            // Create a new order and set values.
            Order sentOrder = new Order();
            sentOrder.orderId = 3;
            sentOrder.orderTime = DateTime.Now;

            // Connect to a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            // Send the Order to the queue.
            myQueue.Send(sentOrder);

            return;
        }

        //**************************************************
        // Peeks a message containing an Order.
        //**************************************************
        
        public void PeekFirstMessage()
        {
            // Connect to a queue.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");
    
            // Set the formatter to indicate the body contains an Order.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(MyProject.Order)});
            
            try
            {
                // Peek and format the message.
                Message myMessage =	myQueue.Peek();
                Order myOrder = (Order)myMessage.Body;

                // Display message information.
                Console.WriteLine("Order ID: " +
                    myOrder.orderId.ToString());
                Console.WriteLine("Sent: " +
                    myOrder.orderTime.ToString());
            }
            
            catch (MessageQueueException)
            {
                // Handle Message Queuing exceptions.
            }

            // Handle invalid serialization format.
            catch (InvalidOperationException e)
            {
                Console.WriteLine(e.Message);
            }
            
            // Catch other exceptions as necessary.

            return;
        }
    }
}

Remarques

Utilisez cette surcharge pour jeter un coup d’œil à une file d’attente ou pour attendre qu’un message existe dans la file d’attente.

La Peek méthode lit, mais ne supprime pas, le premier message de la file d’attente. Par conséquent, les appels répétés pour Peek retourner le même message, sauf si un message de priorité plus élevée arrive dans la file d’attente. La Receive méthode, d’autre part, lit et supprime le premier message de la file d’attente. Les appels répétés à Receive, par conséquent, retournent différents messages.

Message Queuing classe les messages dans la file d’attente en fonction de la priorité et de l’heure d’arrivée. Un message plus récent n’est placé devant un message plus ancien que s’il est d’une priorité plus élevée.

Utilisez Peek lorsque le thread en cours peut faire l'objet d'un blocage en attendant l'arrivée d'un message dans la file d'attente. Étant donné que cette surcharge ne spécifie pas de délai d’attente, l’application peut attendre indéfiniment. Si vous souhaitez que le traitement de l'application se poursuive sans attendre, utilisez la méthode BeginPeek asynchrone. Vous pouvez également spécifier un délai d’attente pour qu’un message arrive dans la file d’attente en utilisant la surcharge de Peek qui spécifie un délai d’attente.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Peek(TimeSpan)

Retourne (lit) le premier message figurant dans la file d'attente référencée par ce MessageQueue sans le supprimer. La méthode Peek() étant synchrone, elle bloque le thread en cours jusqu'à ce qu'un message soit disponible ou que le délai spécifié expire.

C#
public System.Messaging.Message Peek (TimeSpan timeout);

Paramètres

timeout
TimeSpan

TimeSpan qui indique le délai maximal à attendre pour l'arrivée d'un message dans la file d'attente.

Retours

Message représentant le premier message dans la file d'attente.

Exceptions

La valeur spécifiée pour le paramètre timeout n'est pas valide. Il se peut que timeout soit inférieur à Zero ou supérieur à InfiniteTimeout.

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Exemples

L’exemple de code suivant utilise la Peek méthode avec un délai d’expiration de zéro pour case activée si la file d’attente est vide.

C#
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 determines whether a queue is empty.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Determine whether a queue is empty.
            bool isQueueEmpty = myNewQueue.IsQueueEmpty();
                        
            return;
        }

        //**************************************************
        // Determines whether a queue is empty. The Peek()
        // method throws an exception if there is no message
        // in the queue. This method handles that exception
        // by returning true to the calling method.
        //**************************************************
        
        public bool IsQueueEmpty()
        {
            bool isQueueEmpty = false;

            // Connect to a queue.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            try
            {
                // Set Peek to return immediately.
                myQueue.Peek(new TimeSpan(0));

                // If an IOTimeout was not thrown, there is a message
                // in the queue.
                isQueueEmpty = false;
            }

            catch(MessageQueueException e)
            {
                if (e.MessageQueueErrorCode ==
                    MessageQueueErrorCode.IOTimeout)
                {
                    // No message was in the queue.
                    isQueueEmpty = true;
                }

                // Handle other sources of MessageQueueException.
            }

            // Handle other exceptions as necessary.

            // Return true if there are no messages in the queue.
            return isQueueEmpty;
        }
    }
}

Remarques

Utilisez cette surcharge pour jeter un coup d’œil à une file d’attente ou pour attendre une période spécifiée jusqu’à ce qu’un message existe dans la file d’attente. La méthode retourne immédiatement si un message existe déjà dans la file d’attente.

La Peek méthode lit, mais ne supprime pas, le premier message de la file d’attente. Par conséquent, les appels répétés pour Peek retourner le même message, sauf si un message de priorité plus élevée arrive dans la file d’attente. La Receive méthode, d’autre part, lit et supprime le premier message de la file d’attente. Les appels répétés à Receive, par conséquent, retournent différents messages.

Message Queuing classe les messages dans la file d’attente en fonction de la priorité et de l’heure d’arrivée. Un message plus récent n’est placé devant un message plus ancien que s’il est d’une priorité plus élevée.

Utilisez Peek lorsque le thread en cours peut faire l'objet d'un blocage en attendant l'arrivée d'un message dans la file d'attente. Le thread sera bloqué jusqu’à la période spécifiée, ou indéfiniment si vous avez indiqué InfiniteTimeout. Si vous souhaitez que le traitement de l'application se poursuive sans attendre, utilisez la méthode BeginPeek asynchrone.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Peek(TimeSpan, Cursor, PeekAction)

Retourne (lit) le message actuel ou le message suivant de la file d'attente sans le supprimer, à l'aide du curseur spécifié. La méthode Peek() étant synchrone, elle bloque le thread en cours jusqu'à ce qu'un message soit disponible ou que le délai spécifié expire.

C#
public System.Messaging.Message Peek (TimeSpan timeout, System.Messaging.Cursor cursor, System.Messaging.PeekAction action);

Paramètres

timeout
TimeSpan

TimeSpan qui indique le délai maximal à attendre pour l'arrivée d'un message dans la file d'attente.

cursor
Cursor

Cursor qui conserve une position spécifique dans la file d'attente de messages.

action
PeekAction

Une des valeurs de l'objet PeekAction. Indique s'il faut lire le message en cours dans la file d'attente ou le message suivant.

Retours

Message qui représente un message dans la file d'attente.

Exceptions

Une valeur autre que PeekAction.Current ou PeekAction.Next a été spécifiée pour le paramètre action.

Le paramètre cursor a la valeur null.

La valeur spécifiée pour le paramètre timeout n'est pas valide. Il est possible que timeout soit inférieur à Zero ou supérieur à InfiniteTimeout.

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Remarques

Utilisez cette surcharge pour jeter un coup d’œil à une file d’attente ou pour attendre une période spécifiée jusqu’à ce qu’un message existe dans la file d’attente. La méthode retourne immédiatement si un message existe déjà dans la file d’attente.

La Peek méthode lit, mais ne supprime pas, un message de la file d’attente. La Receive méthode, d’autre part, lit et supprime un message de la file d’attente.

Utilisez Peek lorsque le thread en cours peut faire l'objet d'un blocage en attendant l'arrivée d'un message dans la file d'attente. Le thread est bloqué jusqu’à la période spécifiée, ou indéfiniment si vous avez indiqué InfiniteTimeout. Si vous souhaitez que le traitement de l'application se poursuive sans attendre, utilisez la méthode BeginPeek asynchrone.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Cohérence de thread

La méthode n’est pas thread safe.