在 MessageQueue 上调用 Close() 或 Dispose() 没有任何作用

Omn*_*Owl 0 c# dispose msmq

我有打电话的问题Close()Dispose()MessageQueue。我有一个应该能够管理这些消息队列的应用程序。打开和关闭它们。

但是当我打电话时Close()还是Dispose()什么也没有发生。队列仍然存在于机器上。我使用该MessageQueue.GetPrivateQueuesByMachine()方法获取MessageQueue's的数组,并且在调用Close()or后它仍然在那里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;
}
Run Code Online (Sandbox Code Playgroud)

该方法GetQueueArray()定义为(在同一类中):

public MessageQueue[] GetQueueArray()
{
    return MessageQueue.GetPrivateQueuesByMachine(machinename);
}
Run Code Online (Sandbox Code Playgroud)

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

我如何实际关闭或处理队列?

nvo*_*igt 5

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

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