次の方法で共有


MessageQueue.GetMessageEnumerator メソッド

キューにあるすべてのメッセージに対して列挙子オブジェクトを作成します。

Public Function GetMessageEnumerator() As MessageEnumerator
[C#]
public MessageEnumerator GetMessageEnumerator();
[C++]
public: MessageEnumerator* GetMessageEnumerator();
[JScript]
public function GetMessageEnumerator() : MessageEnumerator;

戻り値

キューに含まれるメッセージを保持する MessageEnumerator

解説

GetMessageEnumerator は、キューにあるすべてのメッセージの動的リストを作成します。 GetMessageEnumerator が返す MessageEnumerator に対して RemoveCurrent を呼び出して、列挙子の現在の位置にあるメッセージをキューから削除できます。

カーソルは、キューにあるメッセージの動的リストに関連付けられるため、メッセージが現在のカーソル位置よりも後ろにあれば、列挙体はキューのメッセージに対して行った変更を反映します。たとえば、カーソルの現在位置よりも後ろに配置された優先順位が低いメッセージに列挙子は自動的にアクセスできます。しかし、その位置よりも前に挿入された優先順位が高いメッセージにはアクセスできません。ただし、列挙体はリセットできます。つまり、 MessageEnumerator に対して Reset を呼び出して、リストの先頭にカーソルを戻すことができます。

メモ   列挙体の中でのメッセージの順序は、キューの中での順序を反映します。そのため、優先順位が高いメッセージは、優先順位が低いメッセージよりも前に出現します。

キューにあるメッセージへの動的接続ではなく、静的スナップショットが必要な場合は、 GetAllMessages を呼び出します。このメソッドは、メソッドが呼び出された時点でのメッセージを表す Message オブジェクトの配列を返します。

このメソッドが各種のワークグループ モードで使用できるかどうかを次の表に示します。

ワークグループ モード 使用可否
ローカル コンピュータ はい
ローカル コンピュータ + 直接書式名 はい
リモート コンピュータ はい
リモート コンピュータ + 直接書式名 はい

使用例

[Visual Basic, C#, C++] キューにあるメッセージの動的リストを取得し、 Priority プロパティが MessagePriority.Lowest に設定されたすべてのメッセージをカウントする例を次に示します。

 
Imports System
Imports 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 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 'Main


        '**************************************************
        ' 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 'CountLowestPriority

    End Class 'MyNewQueue
End Namespace 'MyProject

[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 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;
        }
    }
}

[C++] 
#using <mscorlib.dll>
#using <system.dll>
#using <system.messaging.dll>

using namespace System;
using namespace System::Messaging;

__gc class MyNewQueue 
{
public:
    void CountLowestPriority() 
    {
        // Holds the count of Lowest priority messages.
        UInt32 numberItems = 0;

        // Connect to a queue.
        MessageQueue* myQueue = new MessageQueue(S".\\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(S"Lowest priority messages: {0}", __box(numberItems));

        return;
    }
};

int main() 
{
    // Create a new instance of the class.
    MyNewQueue* myNewQueue = new MyNewQueue();

    // Output the count of Lowest priority messages.
    myNewQueue->CountLowestPriority();

    return 0;
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

MessageQueue クラス | MessageQueue メンバ | System.Messaging 名前空間 | GetAllMessages | GetEnumerator | GetMessageQueueEnumerator