在MessageQueue上调用Close()或Dispose()不会执行任何操作

时间:2014-12-02 15:32:42

标签: c# msmq dispose

我在Close()上调用Dispose()MessageQueue时遇到问题。我有一个应该能够管理这些消息队列的应用程序。打开并关闭它们。

但是,当我致电Close()Dispose()时,没有任何反应。队列仍然存在于计算机上。我使用MessageQueue.GetPrivateQueuesByMachine()方法获取MessageQueue的数组,并在调用Close()Dispose()后仍然在那里。经过一些阅读后,似乎Dipose()应该是我使用但仍然存在的那个。

这是我用来尝试关闭队列的代码

public String CloseQueue(String path)
{
    if (GetQueueArray().Length == 0)
    {
        return "The Queue Array is Empty!";
    }

    foreach (MessageQueue m in GetQueueArray())
    {
        if (m.Path.Equals(path))
        {
            try
            {
                path = m.QueueName;
                m.Close();
                break;
            }
            catch (Exception e)
            {
                return e.Message;
            }
        }
    }
    return "Successfully Closed Queue at path: " + path;
}

方法GetQueueArray()定义如下(在同一个类中):

public MessageQueue[] GetQueueArray()
{
    return MessageQueue.GetPrivateQueuesByMachine(machinename);
}

我这样做只是为了方便我的GUI应用程序在需要时调用该方法。

如何实际关闭或处置队列?

1 个答案:

答案 0 :(得分:3)

CloseDispose仅适用于您的消息队列C#对象的实例。它们不会影响实际的消息队列。与处理数据库连接的方式相同,不会自动从服务器中删除整个数据库。

您需要使用MessageQueue的静态Delete方法。