MessageQueue.Peek Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Retorna uma cópia da primeira mensagem na fila sem remover a mensagem da fila.
Sobrecargas
| Name | Description |
|---|---|
| Peek() |
Retorna sem remover (peeks) a primeira mensagem na fila referenciada por este MessageQueue. O Peek() método é síncrono, pelo que bloqueia a thread atual até que uma mensagem fique disponível. |
| Peek(TimeSpan) |
Retorna sem remover (peeks) a primeira mensagem na fila referenciada por este MessageQueue. O Peek() método é síncrono, pelo que bloqueia a thread atual até que uma mensagem fique disponível ou ocorra o time-out especificado. |
| Peek(TimeSpan, Cursor, PeekAction) |
Retorna sem remover (espreitar) a mensagem atual ou próxima na fila, usando o cursor especificado. O Peek() método é síncrono, pelo que bloqueia a thread atual até que uma mensagem fique disponível ou ocorra o time-out especificado. |
Peek()
Retorna sem remover (peeks) a primeira mensagem na fila referenciada por este MessageQueue. O Peek() método é síncrono, pelo que bloqueia a thread atual até que uma mensagem fique disponível.
public:
System::Messaging::Message ^ Peek();
public System.Messaging.Message Peek();
member this.Peek : unit -> System.Messaging.Message
Public Function Peek () As Message
Devoluções
O Message que representa a primeira mensagem na fila.
Exceções
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Exemplos
Os exemplos seguintes utilizam o Peek método numa fila.
No primeiro exemplo, a aplicação espera até que uma mensagem fique disponível na fila. Note-se que o primeiro exemplo não acede à mensagem que chega; limita-se a pausar o processamento até chegar uma mensagem. Se uma mensagem já existir na fila, ela retorna imediatamente.
No segundo exemplo, uma mensagem que contém uma classe definida Order pela aplicação é enviada para a fila e depois espreitada a partir da fila.
#using <system.dll>
#using <system.messaging.dll>
using namespace System;
using namespace System::Messaging;
// This class represents an object the following example
// sends to a queue and receives from a queue.
ref class Order
{
public:
int orderId;
DateTime orderTime;
};
/// <summary>
/// Provides a container class for the example.
/// </summary>
ref class MyNewQueue
{
public:
//*************************************************
// Posts a notification when a message arrives in
// the queue S"monitoredQueue". Does not retrieve any
// message information when peeking the message.
//*************************************************
void NotifyArrived()
{
// Connect to a queue.
MessageQueue^ myQueue = gcnew 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.
//*************************************************
void SendMessage()
{
// Create a new order and set values.
Order^ sentOrder = gcnew Order;
sentOrder->orderId = 3;
sentOrder->orderTime = DateTime::Now;
// Connect to a queue on the local computer.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Send the Order to the queue.
myQueue->Send( sentOrder );
return;
}
//*************************************************
// Peeks a message containing an Order.
//*************************************************
void PeekFirstMessage()
{
// Connect to a queue.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Set the formatter to indicate the body contains an Order.
array<Type^>^p = gcnew array<Type^>(1);
p[ 0 ] = Order::typeid;
myQueue->Formatter = gcnew XmlMessageFormatter( p );
try
{
// Peek and format the message.
Message^ myMessage = myQueue->Peek();
Order^ myOrder = static_cast<Order^>(myMessage->Body);
// Display message information.
Console::WriteLine( "Order ID: {0}", myOrder->orderId );
Console::WriteLine( "Sent: {0}", myOrder->orderTime );
}
catch ( MessageQueueException^ )
{
// Handle Message Queuing exceptions.
}
// Handle invalid serialization format.
catch ( InvalidOperationException^ e )
{
Console::WriteLine( e->Message );
}
// Catch other exceptions as necessary.
return;
}
};
//*************************************************
// 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.
//*************************************************
int main()
{
// Create a new instance of the class.
MyNewQueue^ myNewQueue = gcnew 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 0;
}
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;
}
}
}
Imports System.Messaging
' This class represents an object the following example
' sends to a queue and peeks from a queue.
Public Class Order
Public orderId As Integer
Public orderTime As DateTime
End Class
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 Shared Sub Main()
' Create a new instance of the class.
Dim myNewQueue As 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
End Sub
' Posts a notification when a message arrives in
' the queue "monitoredQueue". Does not retrieve any
' message information when peeking the message.
Public Sub NotifyArrived()
' Connect to a queue.
Dim myQueue As New MessageQueue(".\monitoredQueue")
' Specify to retrieve no message information.
myQueue.MessageReadPropertyFilter.ClearAll()
' Wait for a message to arrive.
Dim emptyMessage As Message = myQueue.Peek()
' Post a notification when a message arrives.
Console.WriteLine("A message has arrived in the queue.")
Return
End Sub
' Sends an Order to a queue.
Public Sub SendMessage()
' Create a new order and set values.
Dim sentOrder As New Order()
sentOrder.orderId = 3
sentOrder.orderTime = DateTime.Now
' Connect to a queue on the local computer.
Dim myQueue As New MessageQueue(".\myQueue")
' Send the Order to the queue.
myQueue.Send(sentOrder)
Return
End Sub
' Peeks a message containing an Order.
Public Sub PeekFirstMessage()
' Connect to a queue.
Dim myQueue As New MessageQueue(".\myQueue")
' Set the formatter to indicate body contains an Order.
myQueue.Formatter = New XmlMessageFormatter(New Type() _
{GetType(Order)})
Try
' Peek and format the message.
Dim myMessage As Message = myQueue.Peek()
Dim myOrder As Order = CType(myMessage.Body, Order)
' Display message information.
Console.WriteLine(("Order ID: " + _
myOrder.orderId.ToString()))
Console.WriteLine(("Sent: " + _
myOrder.orderTime.ToString()))
Catch m as MessageQueueException
' Handle Message Queuing exceptions.
Catch e As InvalidOperationException
' Handle invalid serialization format.
Console.WriteLine(e.Message)
' Catch other exceptions as necessary.
End Try
Return
End Sub
End Class
Observações
Usa esta sobrecarga para espreitar uma fila, ou para esperar que exista uma mensagem na fila.
O Peek método lê, mas não remove, a primeira mensagem da fila. Portanto, chamadas repetidas para Peek devolver a mesma mensagem, a menos que uma mensagem de prioridade superior chegue à fila. O Receive método, por outro lado, lê e remove a primeira mensagem da fila. Chamadas repetidas para Receive, portanto, devolver mensagens diferentes.
A Fila de Mensagens ordena as mensagens na fila de acordo com a prioridade e hora de chegada. Uma mensagem mais recente é colocada antes de uma mais antiga apenas se for de maior prioridade.
Peek Use quando for aceitável que o fio atual seja bloqueado enquanto espera que uma mensagem chegue à fila. Como esta sobrecarga não especifica um time-out, a aplicação pode esperar indefinidamente. Se precisares que o processamento da candidatura continue sem esperar, usa o método assíncrono BeginPeek . Alternativamente, pode especificar um time-out para uma mensagem chegar à fila usando a sobrecarga de Peek que especifica um time-out.
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
Peek(TimeSpan)
Retorna sem remover (peeks) a primeira mensagem na fila referenciada por este MessageQueue. O Peek() método é síncrono, pelo que bloqueia a thread atual até que uma mensagem fique disponível ou ocorra o time-out especificado.
public:
System::Messaging::Message ^ Peek(TimeSpan timeout);
public System.Messaging.Message Peek(TimeSpan timeout);
member this.Peek : TimeSpan -> System.Messaging.Message
Public Function Peek (timeout As TimeSpan) As Message
Parâmetros
Devoluções
O Message que representa a primeira mensagem na fila.
Exceções
O valor especificado para o timeout parâmetro não é válido, possivelmente timeout menor ou maior que ZeroInfiniteTimeout.
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Exemplos
O exemplo de código seguinte utiliza o Peek método com um time-out zero para verificar se a fila está vazia.
#using <system.dll>
#using <system.messaging.dll>
using namespace System;
using namespace System::Messaging;
ref class MyNewQueue
{
public:
//*************************************************
// 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.
//*************************************************
bool IsQueueEmpty()
{
bool isQueueEmpty = false;
// Connect to a queue.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
try
{
// Set Peek to return immediately.
myQueue->Peek( TimeSpan(0) );
// If an IOTime->Item[Out] 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;
}
};
//*************************************************
// Provides an entry point into the application.
//
// This example determines whether a queue is empty.
//*************************************************
int main()
{
// Create a new instance of the class.
MyNewQueue^ myNewQueue = gcnew MyNewQueue;
// Determine whether a queue is empty.
bool isQueueEmpty = myNewQueue->IsQueueEmpty();
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 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;
}
}
}
Imports System.Messaging
Public Class MyNewQueue
'
' Provides an entry point into the application.
'
' This example determines whether a queue is empty.
'
Public Shared Sub Main()
' Create a new instance of the class.
Dim myNewQueue As New MyNewQueue()
' Determine whether a queue is empty.
Dim IsQueueEmpty As Boolean = myNewQueue.IsQueueEmpty()
if IsQueueEMpty=True Then Console.WriteLine("Empty")
Return
End Sub
'
' 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 Function IsQueueEmpty() As Boolean
'Dim QueueEmpty As Boolean = False
' Connect to a queue.
Dim myQueue As 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.
'queueEmpty = False
Catch e As MessageQueueException
If e.MessageQueueErrorCode = _
MessageQueueErrorCode.IOTimeout Then
' No message was in the queue.
IsQueueEmpty = True
End If
' Handle other sources of MessageQueueException as necessary.
' Handle other exceptions as necessary.
End Try
' Return true if there are no messages in the queue.
'Return queueEmpty
IsQueueEmpty = False
End Function 'IsQueueEmpty
End Class
Observações
Use esta sobrecarga para espreitar uma fila, ou para esperar um período de tempo especificado até que exista uma mensagem na fila. O método retorna imediatamente se já existir uma mensagem na fila.
O Peek método lê, mas não remove, a primeira mensagem da fila. Portanto, chamadas repetidas para Peek devolver a mesma mensagem, a menos que uma mensagem de prioridade superior chegue à fila. O Receive método, por outro lado, lê e remove a primeira mensagem da fila. Chamadas repetidas para Receive, portanto, devolver mensagens diferentes.
A Fila de Mensagens ordena as mensagens na fila de acordo com a prioridade e hora de chegada. Uma mensagem mais recente é colocada antes de uma mais antiga apenas se for de maior prioridade.
Peek Use quando for aceitável que o fio atual seja bloqueado enquanto espera que uma mensagem chegue à fila. A thread ficará bloqueada até ao período especificado, ou indefinidamente se indicar InfiniteTimeout. Se precisares que o processamento da candidatura continue sem esperar, usa o método assíncrono BeginPeek .
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
Peek(TimeSpan, Cursor, PeekAction)
Retorna sem remover (espreitar) a mensagem atual ou próxima na fila, usando o cursor especificado. O Peek() método é síncrono, pelo que bloqueia a thread atual até que uma mensagem fique disponível ou ocorra o time-out especificado.
public:
System::Messaging::Message ^ Peek(TimeSpan timeout, System::Messaging::Cursor ^ cursor, System::Messaging::PeekAction action);
public System.Messaging.Message Peek(TimeSpan timeout, System.Messaging.Cursor cursor, System.Messaging.PeekAction action);
member this.Peek : TimeSpan * System.Messaging.Cursor * System.Messaging.PeekAction -> System.Messaging.Message
Public Function Peek (timeout As TimeSpan, cursor As Cursor, action As PeekAction) As Message
Parâmetros
- action
- PeekAction
Um dos PeekAction valores. Indica se deve espreitar a mensagem atual na fila ou a próxima mensagem.
Devoluções
A Message que representa uma mensagem na fila.
Exceções
Um valor diferente de PeekAction.Current ou PeekAction.Next foi especificado para o action parâmetro.
O cursor parâmetro é null.
O valor especificado para o parâmetro timeout não é válido. Possivelmente timeout é menor ou maior que ZeroInfiniteTimeout.
Ocorreu um erro ao aceder a um método de Fila de Mensagens.
Observações
Use esta sobrecarga para espreitar uma fila, ou para esperar um período de tempo especificado até que exista uma mensagem na fila. O método retorna imediatamente se já existir uma mensagem na fila.
O Peek método lê, mas não remove, uma mensagem da fila. O Receive método, por outro lado, tanto lê como remove uma mensagem da fila.
Peek Use quando for aceitável que o fio atual seja bloqueado enquanto espera que uma mensagem chegue à fila. O fio fica bloqueado até ao período especificado, ou indefinidamente se indicar InfiniteTimeout. Se precisares que o processamento da candidatura continue sem esperar, usa o método assíncrono BeginPeek .
A tabela seguinte mostra se este método está disponível em vários modos de Grupo de Trabalho.
| Modo de grupo de trabalho | Available |
|---|---|
| Computador local | Yes |
| Computador local e nome do formato direto | Yes |
| Computador remoto | No |
| Computador remoto e nome do formato direto | Yes |
Ver também
Aplica-se a
Segurança de Thread
O método não é seguro para fios.