次の方法で共有


方法 : メッセージを取得する

更新 : 2007 年 11 月

メッセージの一覧を取得するには、静的な取得機構または動的な取得機構を使用できます。メッセージの静的な一覧を取得する場合、システムはキュー内のすべてのメッセージを表す Message オブジェクトの配列を返します。

メッセージの動的な一覧を取得する場合、システムはキュー内のすべてのメッセージを表す MessageEnumerator オブジェクトを返します。MessageEnumerator オブジェクトはカーソルであり、動的な一覧の先頭に初期化されます。一覧での順序は、メッセージの優先順位に従った、キュー内でのメッセージの順序と同じです。カーソルをキュー内の最初のメッセージに移動するには、MoveNext メソッドを呼び出します。列挙子が初期化された後は、MoveNext を使用して残りのメッセージに順番に移動できます。MoveNext メソッドにタイムアウト値を渡すことにより、メッセージが到着するまで待つかどうかを指定できます。

列挙子は動的であるため、カーソルの現在の位置を越えて追加されたメッセージ (たとえば、優先順位が低いメッセージ) にアクセスできます。列挙子は、カーソルの現在の位置より前に挿入されたメッセージにはアクセスできません。MessageEnumerator では、前のメッセージに戻ることはできません。カーソルは、先への移動だけが可能です。Reset メソッドを使用すると、カーソルをキューの先頭に戻すことができます。

92a1h0zc.alert_note(ja-jp,VS.90).gifメモ :

DenySharedReceive を true に設定して MessageQueue をインスタンス化した場合は、キューに接続している間、他のアプリケーションは列挙子内のメッセージを変更できません。

メッセージの静的な一覧を取得するには

  1. MessageQueue コンポーネントのインスタンスを作成し、その Path プロパティに、参照するキューを設定します。詳細については、「方法 : MessageQueue コンポーネントのインスタンスを作成する」を参照してください。

    92a1h0zc.alert_note(ja-jp,VS.90).gifメモ :

    コンポーネントをサーバー エクスプローラから作成した場合、Path プロパティは自動的にキューのキュー パスに設定されます。

  2. 照会の結果を格納するために、Message クラスを参照する配列を作成します。

  3. GetAllMessages メソッドを呼び出します。

  4. 作成した配列に結果を代入します。

    次のコードは、GetAllMessages 関数を使用してキューからメッセージを取得し、メッセージ ラベルをリスト ボックスに表示する方法を示しています。この例では、アプリケーションに MessageQueue コンポーネントのインスタンスが追加されていると仮定しています。

    Private Sub button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles button1.Click
        Me.MessageQueue1.Path = ".\MyQueue"
        Dim msg() As System.Messaging.Message
        Dim i As Integer
        ' Retrieve the messages.
        msg = MessageQueue1.GetAllMessages()
        ' Clear the current contents of the list.
        Me.ListBox1.Items.Clear()
        ' Display the results.
        For i = 0 To msg.Length - 1
            Me.ListBox1.Items.Add(msg(i).Label)
        Next
    End Sub
    
     private void button1_Click(System.Object sender, System.EventArgs e)
        {
            messageQueue1.Path = ".\\MyQueue";
            System.Messaging.Message[] msg;
            // Retrieve the messages.
            msg = messageQueue1.GetAllMessages();
            // Clear the current contents of the list.
            this.listBox1.Items.Clear();
            // Display the results.
            for (int i = 0; i < msg.Length; i++)
            {
                this.listBox1.Items.Add(msg[i].Label);
            }
        }
    

    このコードの例は、IntelliSense コード スニペットとしても利用できます。コード スニペット ピッカーでは、これは [Windows Operating System] の [Message Queues] にあります。詳細については、「方法 : コードにスニペットを挿入する (Visual Basic)」を参照してください。

メッセージの動的な一覧を取得するには

  1. MessageQueue コンポーネントのインスタンスを作成し、その Path プロパティに、参照するキューを設定します。詳細については、「方法 : MessageQueue コンポーネントのインスタンスを作成する」を参照してください。

    92a1h0zc.alert_note(ja-jp,VS.90).gifメモ :

    コンポーネントをサーバー エクスプローラから作成した場合、Path プロパティは自動的にキューのキュー パスに設定されます。

  2. 照会の結果を格納するために、MessageEnumerator オブジェクトを作成します。

  3. MessageQueue クラスの GetEnumerator メソッドを呼び出します。

  4. 結果を MessageEnumerator オブジェクトに代入します。コードは次のようになります。

    Dim mq As New System.Messaging.MessageQueue(".\MyQueue")
    Dim msgEnum As System.Messaging.MessageEnumerator
    msgEnum = CType(mq.GetMessageEnumerator2, System.Messaging.MessageEnumerator)
    
         System.Messaging.MessageQueue mq = new System.Messaging.MessageQueue();
            System.Messaging.MessageEnumerator msgEnum;
            mq.Path = @".\MyQueue";
            msgEnum = (System.Messaging.MessageEnumerator)(mq.GetMessageEnumerator2());
    
    

参照

処理手順

方法 : キューを取得する

概念

キューおよびメッセージのコレクション