如何:检索消息
更新:2007 年 11 月
可使用静态或动态检索机制检索消息列表。检索静态消息列表时,系统返回用于表示队列中所有消息的 Message 对象数组。
检索动态消息列表时,系统返回用于表示队列中所有消息的 MessageEnumerator 对象。MessageEnumerator 对象是一个游标,已被初始化为动态列表的开头。按照消息优先级,列表顺序与消息在队列中的顺序相同。可以通过调用 MoveNext 方法将游标移动到队列中的第一条消息。初始化枚举数后,可以使用 MoveNext 向前逐个通过其余的消息。可通过将超时传递到 MoveNext 方法中,指定是否等待消息变得可用。
因为枚举数是动态的,所以它可以访问追加在游标的当前位置之外(例如,由于优先级较低)的消息。枚举数不能访问插入在游标的当前位置前面的消息。不能使用 MessageEnumerator 向后移动。游标只允许向前移动。Reset 方法使您能够将游标放回队列的开头。
说明: |
---|
如果您在将 DenySharedReceive 设置为 true 的情况下实例化 MessageQueue,则在您与队列保持连接的情况下,任何应用程序都不能修改枚举数中的消息。 |
检索静态消息列表
创建 MessageQueue 组件的一个实例,并将其 Path 属性设置为要引用的队列。有关更多信息,请参见如何:创建 MessageQueue 组件实例。
说明: 如果通过“服务器资源管理器”创建组件,Path 属性将自动设置为该队列的队列路径。
创建引用 Message 类的数组以存放查询结果。
调用 GetAllMessages 方法。
将结果指派到创建的数组。
下面的代码演示如何使用 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)。
检索动态消息列表
创建 MessageQueue 组件的一个实例,并将其 Path 属性设置为要引用的队列。有关更多信息,请参见如何:创建 MessageQueue 组件实例。
说明: 如果通过“服务器资源管理器”创建组件,Path 属性将自动设置为该队列的队列路径。
创建 MessageEnumerator 对象以存放查询结果。
调用 MessageQueue 类的 GetEnumerator 方法。
将结果分配给 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());