微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何从队列中删除邮件?

我有消息陷入队列,我正在寻找一种以编程方式删除它们的方法.

有没有办法从队列中删除超过x天的消息?
我可以连接和删除这样的队列,但不知道如何删除单个邮件.

MessageQueue queue = new MessageQueue(@".\private$\SomeTestName");
//queue.Purge(); //deletes the entire queue
try
{
    // Peek and format the message. 
    Message m = myQueue.Peek();

   // display message information.
   Console.WriteLine("Sent time {0}",m.SentTime);
   Console.WriteLine("Arrived time {0}",m.ArrivedTime);
}

解决方法

没有API可用于执行此操作.但你可以使用

> GetMessageEnumerator2()
> RemoveCurrent()

使用枚举的好处是,如果队列有很多消息,读取所有消息可能会导致OutOfMemoryException.使用枚举器,您一次只能读取1条消息,并且可以重用为其分配的内存.

提高性能的另一个技巧是指定要读取的属性,这样如果消息体很大而您对内容不感兴趣,则可以禁用它.

var enumerator = _queue.GetMessageEnumerator2();  // get enumerator
var staleDate = DateTime.UtcNow.AddDays(-3);      // take 3 days from UTC Now    
var filter = new MessagePropertyFilter();         // configure props to read
filter.Clearall();                                // don't read any property
filter.ArrivedTime = true;                        // enable arrived time
_queue.MessageReadPropertyFilter = filter;        // apply filter

while (enumerator.MoveNext())    
     if(enumerator.Current.ArrivedTime.Date >= staleDate)
         enumerator.RemoveCurrent();

原文地址:https://www.jb51.cc/csharp/100998.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐