MessageEnumerator 클래스

정의

앞으로만 이동 가능한 커서를 제공하여 메시지 큐에 있는 메시지를 열거합니다.

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
상속
MessageEnumerator
구현

예제

다음 예제에서는 큐에 있는 메시지의 동적 목록을 가져오고 속성이 설정된 모든 메시지를 Priority 계산합니다 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

설명

큐의 메시지와 동적 상호 작용에 사용합니다 MessageEnumerator . 클래스를 MessageQueue 통해 사용할 수 있는 메서드는 큐의 동적 메시지 목록을 가리키거나 지정된 즉시 복사본(스냅샷)이 포함된 배열을 지정된 메서드가 호출될 때 큐의 반환 MessageEnumerator 할 수 있습니다.

정적 스냅샷과 달리 열거자를 사용하면 컬렉션을 수정할 수 있습니다. 를 MessageEnumerator사용하면 큐에서 메시지를 제거할 수 있으며 변경 내용은 큐에 즉시 반영됩니다.

열거자는 큐를 쿼리할 때 큐에서 메시지를 제거하지 않습니다. 현재 커서 위치에서 메시지에 대한 정보를 반환하지만 큐에 메시지를 남깁니다.

MessageEnumerator 동적 목록 헤드에 초기화 하는 커서입니다. 목록 순서는 메시지 우선 순위에 따라 큐의 메시지 순서와 동일합니다. 커서를 호출 MoveNext하여 큐의 첫 번째 메시지로 이동할 수 있습니다. 열거자가 초기화되면 나머지 메시지를 단계별로 진행하는 데 사용할 MoveNext 수 있습니다. 메서드에 시간 제한을 MoveNext 전달하여 메시지를 사용할 수 있게 될 때까지 기다릴지 여부를 지정할 수 있습니다.

열거자는 동적이므로 커서의 현재 위치(예: 낮은 우선 순위로 인해)를 넘어 추가된 메시지에 열거자가 액세스할 수 있습니다. 커서의 현재 위치 앞에 삽입된 메시지에 액세스할 수 없습니다. 여 뒤로 이동 하는 것이 불가능 한 MessageEnumerator합니다. 커서를 사용하면 앞으로만 이동할 수 있습니다. 이 Reset 메서드를 사용하면 커서를 큐의 시작 부분에 다시 배치할 수 있습니다.

지정된 큐의 MessageEnumerator 인스턴스는 독립적으로 작동합니다. 동일한 큐에 적용되는 두 개의 MessageEnumerator 인스턴스를 만들 수 있습니다. 두 번째 열거자가 첫 번째 열거자 앞에 배치되면 큐의 메시지에 대한 변경 내용 MessageEnumerator 이 두 번째 열거자에 즉시 반영됩니다. 그러나 두 열거자의 위치가 같고 그 중 하나가 해당 위치에서 메시지를 제거하면 다른 열거자가 현재 삭제된 메시지에서 속성 값을 Current 얻으려고 하면 예외가 throw됩니다.

참고

인스턴스를 만들면 MessageQueue 사용 하 여 MessageQueue.DenySharedReceivetrue, 큐에 연결 해야 하는 동안 다른 애플리케이션에 열거자에 메시지를 수정할 수 있습니다.

속성

Current

이 열거자가 가리키는 현재 Message를 가져옵니다.

CursorHandle

큐에서 메시지를 찾는 데 사용되는 네이티브 메시지 큐 커서 핸들을 가져옵니다.

메서드

Close()

해당 열거자와 관련된 리소스를 삭제합니다.

CreateObjRef(Type)

원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.

(다음에서 상속됨 MarshalByRefObject)
Dispose()

MessageEnumerator에서 사용하는 모든 리소스를 해제합니다.

Dispose(Boolean)

MessageEnumerator에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
Finalize()

이 API는 제품 인프라를 지원하며 코드에서 직접 사용되지 않습니다.

열거자에서 보유하는 리소스를 해제합니다.

GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetLifetimeService()
사용되지 않습니다.

이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다.

(다음에서 상속됨 MarshalByRefObject)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
InitializeLifetimeService()
사용되지 않습니다.

이 인스턴스의 수명 정책을 제어하는 수명 서비스 개체를 가져옵니다.

(다음에서 상속됨 MarshalByRefObject)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
MemberwiseClone(Boolean)

현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.

(다음에서 상속됨 MarshalByRefObject)
MoveNext()

가능한 경우 열거자를 큐의 다음 메시지로 이동합니다.

MoveNext(TimeSpan)

열거자를 큐의 다음 메시지로 이동합니다. 열거자가 큐의 끝에 배치되는 경우 MoveNext()는 메시지를 사용할 수 있거나 지정된 제한 시간이 만료될 때까지 대기합니다.

RemoveCurrent()

트랜잭션 큐 및 비트랜잭션 큐에서 현재 메시지를 제거하고 호출 애플리케이션에 해당 메시지를 반환합니다. 큐에 도착하는 메시지에 대해 제한 시간이 지정되지 않았습니다.

RemoveCurrent(MessageQueueTransaction)

트랜잭션 큐에서 현재 메시지를 제거하고 호출 애플리케이션에 해당 메시지를 반환합니다. 큐에 도착하는 메시지에 대해 제한 시간이 지정되지 않았습니다.

RemoveCurrent(MessageQueueTransactionType)

큐에서 현재 메시지를 제거하고 호출 애플리케이션에 해당 메시지를 반환합니다. 큐에 도착하는 메시지에 대해 제한 시간이 지정되지 않았습니다.

RemoveCurrent(TimeSpan)

큐에서 현재 메시지를 제거하고 호출 애플리케이션에 해당 메시지를 반환합니다. 제거할 메시지가 있으면 메서드는 해당 메시지를 즉시 반환합니다. 제거할 메시지가 없으면 메서드는 새 메시지가 도착할 때까지 지정한 제한 시간 동안 대기합니다.

RemoveCurrent(TimeSpan, MessageQueueTransaction)

트랜잭션 큐에서 현재 메시지를 제거하고 호출 애플리케이션에 해당 메시지를 반환합니다. 제거할 메시지가 있으면 메서드는 해당 메시지를 즉시 반환합니다. 제거할 메시지가 없으면 메서드는 새 메시지가 도착할 때까지 지정한 제한 시간 동안 대기합니다.

RemoveCurrent(TimeSpan, MessageQueueTransactionType)

큐에서 현재 메시지를 제거하고 호출 애플리케이션에 해당 메시지를 반환합니다. 제거할 메시지가 있으면 메서드는 해당 메시지를 즉시 반환합니다. 제거할 메시지가 없으면 메서드는 새 메시지가 도착할 때까지 지정한 제한 시간 동안 대기합니다.

Reset()

현재 열거자가 큐의 처음을 가리키도록 다시 설정합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IEnumerator.Current

현재 커서 위치에 있는 메시지를 참조하는 Message를 반환합니다.

적용 대상

추가 정보