如何:检索队列

更新:2007 年 11 月

可使用静态或动态检索机制检索队列列表。当您检索队列的静态列表时,系统会返回包含查询结果的 MessageQueue 对象。当您检索队列的动态列表时,系统会返回包含查询结果的 MessageQueueEnumerator 对象。

与按照消息在队列中的顺序返回消息的 MessageEnumerator 不同,MessageQueueEnumerator 不以任何顺序返回队列。这是因为网络上的队列没有按顺序定义,也就是说,它们没有按计算机、标签或用户可访问的其他条件排序。可以通过调用 MoveNext 方法将游标移动到枚举的第一个队列。初始化枚举数后,可以使用 MoveNext 向前逐个通过其余的队列。

不可能使用 MessageQueueEnumerator 向后移动。游标只允许在队列枚举中向前移动。但是,可以调用 Reset 方法重置枚举并再次将游标放在列表的开头。由于枚举数是动态的,所以它可以访问追加在游标的当前位置之外的队列。不事先调用 Reset,就无法访问在游标的当前位置之前插入的队列。

因为 GetPublicQueuesGetPrivateQueuesByMachineGetMessageQueueEnumerator 方法是静态方法,所以在调用这些方法之前不必创建 MessageQueue 类的实例。

检索公共队列或专用队列的静态列表

  1. 创建 MessageQueue 类型的数组以存放查询结果。

  2. 调用 MessageQueue 类的适当方法:

    • 若要无条件地检索所有公共队列,请调用 GetPublicQueues 方法。

    • 若要按条件检索公共队列,请将 Criteria 参数设置为适当的值并调用 GetPrivateQueuesByMachine 方法。

    • 若要仅检索那些共享某个类别 GUID 的公共队列,请调用 GetPublicQueuesByCategory 方法并将该类别 GUID 指定为一个参数。

    • 若要仅检索那些共享某个标签的公共队列,请调用 GetPublicQueuesByLabel 方法并将该标签指定为一个参数。

    • 若要仅检索那些位于某个特定计算机上的公共队列,请调用 GetPublicQueuesByMachine 方法并将该计算机名指定为一个参数。

  3. 将结果指派到数组。

    例如,以下代码显示了可以如何使用列表框来显示在本地计算机上检索到的所有公共队列标签:

    Private Sub button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles button1.Click
        Dim mqlist() As System.Messaging.MessageQueue
        Dim i As Integer
        ' Retrieve queues on the local machine.
        mqlist = System.Messaging.MessageQueue.GetPublicQueuesByMachine(".")
        ' Clear the current contents of the list.
        Me.ListBox1.Items.Clear()
        ' Display the results.
        For i = 0 To mqlist.Length - 1
            Me.ListBox1.Items.Add(mqlist(i).Path)
        Next
    End Sub
    
     private void button1_Click(System.Object sender, System.EventArgs e)
        {
            System.Messaging.MessageQueue[] mqlist;
            // Retrieve public queues.
            mqlist = System.Messaging.MessageQueue.GetPublicQueuesByMachine(
               ".");
            // Clear the current contents of the list.
            this.listBox1.Items.Clear();
            // Display the results.
            for (int i = 0; i < mqlist.Length; i++)
            {
                this.listBox1.Items.Add(mqlist[i].Path);
            }
        }
    

    此代码示例也可用作 Visual Basic IntelliSense 代码段。在代码段选择器中,此代码示例位于“Windows 操作系统”>“消息队列”中。有关更多信息,请参见如何:在代码中插入代码段 (Visual Basic)

检索动态队列列表

  1. 创建 MessageQueueEnumerator 对象以存放查询结果。

  2. 调用 MessageQueue 类的 GetMessageQueueEnumerator 方法。

  3. 若要检索网络上的队列的子集,请将 MessageQueueCriteria 参数设置为适当的值。

  4. 将结果设置为所创建的 MessageQueueEnumerator 对象。您的代码可能类似于:

    Dim mqEnum As System.Messaging.MessageQueueEnumerator
    mqEnum = System.Messaging.MessageQueue.GetMessageQueueEnumerator()
    
         System.Messaging.MessageQueueEnumerator mqEnum;
            mqEnum = System.Messaging.MessageQueue.GetMessageQueueEnumerator();
    

请参见

任务

如何:检索消息

概念

队列和消息集合