У меня возникла проблема с вызовом Close()
или Dispose()
на MessageQueue
. У меня есть приложение, которое должно управлять этими очередями сообщений. Откройте и закройте их.Вызов 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 для вызова этого метода, когда это необходимо.
Как я могу закрыть или избавиться от очередей?
Вы уверены, что это ударил по строке, которая вызывает метод 'Close()'? Вы пробовали обернуть свой код в 'using()' statement? –
'Vipar'' Если класс MessageQueue реализует IDisposable', вы также попробовали просто установить 'm' Object = null; обертывание в 'использование будет также полезно для автоматического удаления'' Выполнение кода' всегда лучше всего в отношении того, чтобы видеть, что ожидаемые строки попадают – MethodMan
Я не уверен, что ваше сообщение точно то, что вы пытаетесь выполнить. Вы говорите, что очередь все еще там. Close и Dispose никогда не удалят очередь с машины. Они представляют собой очереди, созданные на этом компьютере, и ссылаются на ваше приложение для отправки/получения сообщений. Если вы хотите удалить REMOVE с целевой машины, вам нужно будет использовать Delete. См. Ниже: http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.delete%28v=vs.110%29.aspx, а также ответы nvoigts. – gmiley