在 .NET 上的 MSMQ 中,我使用 MessageEnumerator 来查看队列中的所有消息。我想删除满足特定条件的消息。
当我调用 MoveNext 来单步执行队列时,我会返回一个布尔值来告诉我当前消息是否存在。但是,当我执行 RemoveCurrent 时,我如何知道删除后的当前消息是否存在?是检查 Current 并处理异常的唯一方法吗?
这是一个示例,我使用删除超过一年的消息的简单条件。假设队列是在其他地方创建的并使用 MessageReadPropertyFilter.ArrivedTime = true 设置:
private void RemoveOldMessages(MessageQueue q)
{
MessageEnumerator me = q.GetMessageEnumerator2();
bool hasMessage = me.MoveNext();
while (hasMessage)
{
if (me.Current.ArrivedTime < DateTime.Now.AddYears(-1))
{
Message m = me.RemoveCurrent(new TimeSpan(1));
// Removes and returns the current message
// then moves to the cursor to the next message
// How do I know if there is another message? Is this right?:
try
{
m = me.Current;
hasMessage = true;
}
catch (MessageQueueException ex)
{
hasMessage = false;
}
}
else
{
hasMessage = me.MoveNext();
// MoveNext returns a boolean to let me know if is another message
}
}
}