MessageEnumerator Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Udostępnia kursor tylko do przodu, który ma być wyliczany za pośrednictwem komunikatów w kolejce komunikatów.
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
- Dziedziczenie
- Implementuje
Przykłady
Poniższy przykład pobiera dynamiczną listę komunikatów w kolejce i zlicza wszystkie komunikaty z właściwością ustawioną 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
Uwagi
Służy MessageEnumerator do dynamicznej interakcji z komunikatami w kolejce. Metody dostępne za pośrednictwem MessageQueue klasy mogą zwracać MessageEnumerator dynamiczną listę komunikatów w kolejce lub tablicę zawierającą kopię w danym momencie — migawkę — kolejki w momencie wywołania określonej metody.
W przeciwieństwie do migawki statycznej moduł wyliczający umożliwia modyfikowanie kolekcji. Za pomocą elementu MessageEnumeratormożna usunąć komunikaty z kolejki, a zmiana zostanie natychmiast odzwierciedlona w kolejce.
Moduł wyliczający nie usuwa komunikatów z kolejki, gdy wysyła zapytanie do kolejki. Zwraca informacje o komunikacie w bieżącym położeniu kursora, ale pozostawia komunikat w kolejce.
A MessageEnumerator jest kursorem zainicjowanym na czele listy dynamicznej. Kolejność listy jest taka sama jak kolejność komunikatów w kolejce zgodnie z priorytetem komunikatu. Kursor można przenieść do pierwszego komunikatu w kolejce, wywołując polecenie MoveNext. Po zainicjowaniu modułu wyliczającego możesz użyć MoveNext polecenia , aby przejść dalej przez pozostałe komunikaty. Możesz określić, czy zaczekać na udostępnienie komunikatu, przekazując limit czasu do MoveNext metody .
Ponieważ moduł wyliczający jest dynamiczny, komunikat dołączany poza bieżącą pozycją kursora (na przykład ze względu na niski priorytet), może uzyskać dostęp do modułu wyliczającego. Nie można uzyskać dostępu do komunikatu wstawionego przed uzyskaniem dostępu do bieżącej pozycji kursora. Nie można przejść wstecz za pomocą polecenia MessageEnumerator. Kursor umożliwia ruch tylko do przodu. Metoda Reset umożliwia umieszczenie kursora z powrotem na początku kolejki.
MessageEnumerator Wystąpienia dla danej kolejki działają niezależnie. Możesz utworzyć dwa MessageEnumerator wystąpienia, które mają zastosowanie do tej samej kolejki. Zmiany wprowadzone MessageEnumerator w komunikatach w kolejce zostaną odzwierciedlone natychmiast w drugim wyliczaniu, jeśli drugi moduł wyliczający zostanie umieszczony przed pierwszym. Jeśli jednak dwa moduły wyliczające mają taką samą pozycję, a jedna z nich usunie komunikat w tej pozycji, zostanie zgłoszony wyjątek, jeśli drugi moduł wyliczający próbuje uzyskać wartość Current właściwości w komunikacie usuniętym teraz.
Uwaga
Jeśli utworzysz wystąpienie elementu MessageQueue z ustawioną wartością MessageQueue.DenySharedReceivetrue
, żadna inna aplikacja nie może zmodyfikować komunikatów w module wyliczania, gdy masz połączenie z kolejką.
Właściwości
Current |
Pobiera bieżący, Message do którego wskazuje ten moduł wyliczający. |
CursorHandle |
Pobiera natywny uchwyt kursora kolejkowania komunikatów używany do przeglądania komunikatów w kolejce. |
Metody
Close() |
Zwalnia zasoby skojarzone z modułem wyliczania. |
CreateObjRef(Type) |
Tworzy obiekt zawierający wszystkie istotne informacje wymagane do wygenerowania serwera proxy używanego do komunikowania się z obiektem zdalnym. (Odziedziczone po MarshalByRefObject) |
Dispose() |
Zwalnia wszelkie zasoby używane przez element MessageEnumerator. |
Dispose(Boolean) |
Zwalnia zasoby niezarządzane używane przez element MessageEnumerator i opcjonalnie zwalnia zasoby zarządzane. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
Finalize() |
Ten interfejs API obsługuje infrastrukturę produktu i nie jest przeznaczony do użycia bezpośrednio z poziomu kodu. Zwalnia zasoby przechowywane przez moduł wyliczający. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetLifetimeService() |
Przestarzałe.
Pobiera bieżący obiekt usługi okresu istnienia, który kontroluje zasady okresu istnienia dla tego wystąpienia. (Odziedziczone po MarshalByRefObject) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
InitializeLifetimeService() |
Przestarzałe.
Uzyskuje obiekt usługi okresu istnienia, aby kontrolować zasady okresu istnienia dla tego wystąpienia. (Odziedziczone po MarshalByRefObject) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
MemberwiseClone(Boolean) |
Tworzy płytkią kopię bieżącego MarshalByRefObject obiektu. (Odziedziczone po MarshalByRefObject) |
MoveNext() |
Rozwija moduł wyliczający do następnego komunikatu w kolejce, jeśli jest on obecnie dostępny. |
MoveNext(TimeSpan) |
Rozwija moduł wyliczający do następnego komunikatu w kolejce. Jeśli moduł wyliczający znajduje się na końcu kolejki, MoveNext() czeka, aż komunikat będzie dostępny lub podany limit czasu wygaśnie. |
RemoveCurrent() |
Usuwa bieżący komunikat z kolejki transakcyjnej lub innej niż transakcyjna i zwraca komunikat do aplikacji wywołującej. Nie określono limitu czasu dla komunikatu, który ma pojawić się w kolejce. |
RemoveCurrent(MessageQueueTransaction) |
Usuwa bieżący komunikat z kolejki transakcyjnej i zwraca komunikat do aplikacji wywołującej. Nie określono limitu czasu dla komunikatu, który ma pojawić się w kolejce. |
RemoveCurrent(MessageQueueTransactionType) |
Usuwa bieżący komunikat z kolejki i zwraca komunikat do aplikacji wywołującej. Nie określono limitu czasu dla komunikatu, który ma pojawić się w kolejce. |
RemoveCurrent(TimeSpan) |
Usuwa bieżący komunikat z kolejki i zwraca komunikat do aplikacji wywołującej. Jeśli istnieje komunikat do usunięcia, metoda zwraca ją natychmiast. W przeciwnym razie metoda czeka określony limit czasu na nadejście nowego komunikatu. |
RemoveCurrent(TimeSpan, MessageQueueTransaction) |
Usuwa bieżący komunikat z kolejki transakcyjnej i zwraca komunikat do aplikacji wywołującej. Jeśli istnieje komunikat do usunięcia, metoda zwraca ją natychmiast. W przeciwnym razie metoda czeka określony limit czasu na nadejście nowego komunikatu. |
RemoveCurrent(TimeSpan, MessageQueueTransactionType) |
Usuwa bieżący komunikat z kolejki i zwraca komunikat do aplikacji wywołującej. Jeśli istnieje komunikat do usunięcia, metoda zwraca ją natychmiast. W przeciwnym razie metoda czeka określony limit czasu na nadejście nowego komunikatu. |
Reset() |
Resetuje bieżący moduł wyliczający, aby wskazuje na głowę kolejki. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
IEnumerator.Current |
Zwraca element, który Message odwołuje się do komunikatu w bieżącym położeniu kursora. |