MessageEnumerator Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje kurzor jen pro přeposílání výčtu zpráv ve frontě zpráv.
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
- Dědičnost
- Implementuje
Příklady
Následující příklad získá dynamický seznam zpráv ve frontě a spočítá všechny zprávy s vlastností nastavenou Priority na 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
Poznámky
Slouží MessageEnumerator k dynamické interakci se zprávami ve frontě. Metody dostupné prostřednictvím MessageQueue třídy můžou vracet buď MessageEnumerator odkazující na dynamický seznam zpráv ve frontě, nebo pole obsahující kopii v daném okamžiku – snímek – fronty v době, kdy byla zadaná metoda volána.
Na rozdíl od statického snímku umožňuje enumerátor upravit kolekci. Pomocí funkce MessageEnumerator, můžete odebrat zprávy z fronty a změna se okamžitě projeví ve frontě.
Enumerátor neodebere zprávy z fronty při dotazování fronty. Vrátí informace o zprávě na aktuální pozici kurzoru, ale ponechá zprávu ve frontě.
A MessageEnumerator je kurzor inicializovaný do hlavy dynamického seznamu. Pořadí seznamů je stejné jako pořadí zpráv ve frontě podle priority zprávy. Kurzor můžete přesunout do první zprávy ve frontě voláním MoveNext. Po inicializaci enumerátoru můžete použít MoveNext k procházení zbývajících zpráv. Zadáním časového limitu MoveNext do metody můžete určit, jestli se má zpráva čekat na zpřístupnění.
Vzhledem k tomu, že enumerátor je dynamický, může k výčtu přistupovat zpráva, která je připojena za aktuální pozici kurzoru (například kvůli nízké prioritě). Nelze získat přístup ke zprávě vložené před aktuální pozici kurzoru. Není možné krokovat zpět s MessageEnumerator. Kurzor umožňuje pohyb pouze vpřed. Tato Reset metoda umožňuje umístit kurzor zpět na začátek fronty.
Instance dané fronty MessageEnumerator fungují nezávisle. Můžete vytvořit dvě MessageEnumerator instance, které platí pro stejnou frontu. Změny provedené MessageEnumerator ve zprávách ve frontě se projeví okamžitě v druhém výčtu, pokud je druhý enumerátor umístěn před prvním. Pokud ale dva enumerátory mají stejnou pozici a jeden z nich odebere zprávu na této pozici, vyvolá se výjimka, pokud se druhý enumerátor pokusí získat hodnotu Current vlastnosti v nyní odstraněné zprávě.
Poznámka:
Pokud vytvoříte instanci MessageQueue s nastaveným MessageQueue.DenySharedReceivetruenastavením , žádná jiná aplikace nemůže upravovat zprávy v enumerátoru, zatímco máte připojení k frontě.
Vlastnosti
| Name | Description |
|---|---|
| Current |
Získá aktuální Message , na který tento enumerátor odkazuje. |
| CursorHandle |
Získá nativní zpracování kurzoru služby Řízení front zpráv používané k procházení zpráv ve frontě. |
Metody
| Name | Description |
|---|---|
| Close() |
Uvolní prostředky přidružené k enumerátoru. |
| CreateObjRef(Type) |
Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy serveru sloužícího ke komunikaci se vzdáleným objektem. (Zděděno od MarshalByRefObject) |
| Dispose() |
Uvolní všechny prostředky používané nástrojem MessageEnumerator. |
| Dispose(Boolean) |
Uvolní nespravované prostředky používané MessageEnumerator a volitelně uvolní spravované prostředky. |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| Finalize() |
Toto rozhraní API podporuje produktovou infrastrukturu a není určené k použití přímo z uživatelského kódu. Uvolní prostředky uchovávané enumerátorem. |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetLifetimeService() |
Zastaralé.
Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| InitializeLifetimeService() |
Zastaralé.
Získá objekt služby životnosti pro řízení zásad životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| MemberwiseClone(Boolean) |
Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu. (Zděděno od MarshalByRefObject) |
| MoveNext() |
Přejde enumerátor na další zprávu ve frontě, pokud je aktuálně k dispozici. |
| MoveNext(TimeSpan) |
Přejde enumerátor na další zprávu ve frontě. Pokud je enumerátor umístěn na konci fronty, počká, MoveNext() až bude zpráva k dispozici nebo vyprší daný časový limit. |
| RemoveCurrent() |
Odebere aktuální zprávu z transakční nebo neaktuální fronty a vrátí zprávu volající aplikaci. Pro doručení zprávy do fronty není zadán žádný časový limit. |
| RemoveCurrent(MessageQueueTransaction) |
Odebere aktuální zprávu z transakční fronty a vrátí zprávu do volající aplikace. Pro doručení zprávy do fronty není zadán žádný časový limit. |
| RemoveCurrent(MessageQueueTransactionType) |
Odebere aktuální zprávu z fronty a vrátí zprávu volající aplikaci. Pro doručení zprávy do fronty není zadán žádný časový limit. |
| RemoveCurrent(TimeSpan, MessageQueueTransaction) |
Odebere aktuální zprávu z transakční fronty a vrátí zprávu do volající aplikace. Pokud je zpráva k odebrání, metoda ji okamžitě vrátí. V opačném případě metoda čeká zadaný časový limit pro přijetí nové zprávy. |
| RemoveCurrent(TimeSpan, MessageQueueTransactionType) |
Odebere aktuální zprávu z fronty a vrátí zprávu volající aplikaci. Pokud je zpráva k odebrání, metoda ji okamžitě vrátí. V opačném případě metoda čeká zadaný časový limit pro přijetí nové zprávy. |
| RemoveCurrent(TimeSpan) |
Odebere aktuální zprávu z fronty a vrátí zprávu do volající aplikace. Pokud je zpráva k odebrání, metoda ji okamžitě vrátí. V opačném případě metoda čeká zadaný časový limit pro přijetí nové zprávy. |
| Reset() |
Obnoví aktuální enumerátor tak, aby odkazuje na hlavu fronty. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| IEnumerator.Current |
Message Vrátí odkaz na zprávu na aktuální pozici kurzoru. |