5
在.NET上的MSMQ中,我使用MessageEnumerator來查看隊列中的所有消息。我想刪除符合特定條件的郵件。與MessageEnumerator RemoveCurrent我如何知道我是否在排隊結束?
當我調用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
}
}
}
這絕對應該是公認的答案。 MSMQ文檔並不清楚,這是我見過的第一個解決方案。理想情況下,RemoveCurrent不應增加計數器。 –