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

本文关键字:执行 任何 操作 Dispose 调用 close MessageQueue | 更新日期: 2023-09-27 18:32:45

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

但是当我打电话给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 应用程序在需要时调用该方法。

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

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

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

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