MessageQueue
에 Close()
또는 Dispose()
을 호출하는 데 문제가 있습니다. 이러한 메시지 대기열을 관리 할 수있는 응용 프로그램이 있습니다. 그들을 열고 닫으십시오.MessageQueue에서 Close() 또는 Dispose()를 호출하면 아무 작업도 수행되지 않습니다.
그러나 Close()
또는 Dispose()
으로 전화하면 아무 일도 일어나지 않습니다. 큐는 여전히 시스템에 있습니다. 나는 MessageQueue.GetPrivateQueuesByMachine()
메서드를 사용하여 MessageQueue
의 배열을 가져오고 Close()
또는 Dispose()
을 호출 한 후에도 여전히 그곳에 있습니다. 그 주위의 약간의 독서 후 나는 Dipose()
가 내가 아직도 사용하는 하나이어야하는 것처럼 보인다. 난 그냥에서이 작업을 수행
public MessageQueue[] GetQueueArray()
{
return MessageQueue.GetPrivateQueuesByMachine(machinename);
}
:
이
내가 (같은 클래스에) 너무으로 정의 된 큐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()
을 시도하고 종료하는 데 사용하는 코드입니다 내 GUI 응용 프로그램의 편리함은 필요할 때 해당 메소드를 호출합니다.
대기열을 실제로 닫거나 처리하려면 어떻게해야합니까?
'Close()'메소드를 호출하는 라인에 도달 했습니까? 'using()'문에서 코드를 래핑 해 보았습니까? –
'Vipar''MessageQueue 클래스가 IDisposable을 구현하는 경우''m' Object = null을 설정해 보았습니다. '자동 처분 (Auto Disposing)'에 도움이 될 것입니다.''코드를 밟음 (Stepping through the code) '은 예상되는 줄이 맞았는지 항상 확인하는 것과 관련하여 가장 좋습니다. – MethodMan
나는 당신이 성취하고자하는 것을 정확히 귀하의 게시물로 확신하지 못합니다. 대기열이 아직 있음을 언급합니다. Close 및 Dispose는 시스템에서 대기열을 절대 제거하지 않습니다. 이 시스템은 해당 시스템에서 작성되고 응용 프로그램에서 메시지 송수신을 위해 참조하는 대기열입니다. 실제로 대상 시스템에서 큐를 제거하려면 삭제를 사용해야합니다. 참조 : http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.delete%28v=vs.110%29.aspx뿐만 아니라 아래의 답변을 nvoigts. – gmiley