如何:检索消息

更新:2007 年 11 月

可使用静态或动态检索机制检索消息列表。检索静态消息列表时,系统返回用于表示队列中所有消息的 Message 对象数组。

检索动态消息列表时,系统返回用于表示队列中所有消息的 MessageEnumerator 对象。MessageEnumerator 对象是一个游标,已被初始化为动态列表的开头。按照消息优先级,列表顺序与消息在队列中的顺序相同。可以通过调用 MoveNext 方法将游标移动到队列中的第一条消息。初始化枚举数后,可以使用 MoveNext 向前逐个通过其余的消息。可通过将超时传递到 MoveNext 方法中,指定是否等待消息变得可用。

因为枚举数是动态的,所以它可以访问追加在游标的当前位置之外(例如,由于优先级较低)的消息。枚举数不能访问插入在游标的当前位置前面的消息。不能使用 MessageEnumerator 向后移动。游标只允许向前移动。Reset 方法使您能够将游标放回队列的开头。

说明:

如果您在将 DenySharedReceive 设置为 true 的情况下实例化 MessageQueue,则在您与队列保持连接的情况下,任何应用程序都不能修改枚举数中的消息。

检索静态消息列表

  1. 创建 MessageQueue 组件的一个实例,并将其 Path 属性设置为要引用的队列。有关更多信息,请参见如何:创建 MessageQueue 组件实例

    说明:

    如果通过“服务器资源管理器”创建组件,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 操作系统”>“消息队列”中。有关更多信息,请参见如何:在代码中插入代码段 (Visual Basic)

检索动态消息列表

  1. 创建 MessageQueue 组件的一个实例,并将其 Path 属性设置为要引用的队列。有关更多信息,请参见如何:创建 MessageQueue 组件实例

    说明:

    如果通过“服务器资源管理器”创建组件,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());
    
    

请参见

任务

如何:检索队列

概念

队列和消息集合