2011-10-18 58 views
1

有人可以解决我的问题吗?如何实现MSMQ触发器

我想在MSMQ队列中插入一些数据时触发一个事件我该怎么做?

+1

为什么不使用MSMQ触发器服务? –

回答

4

您创建消息队列的实例,并开始在它异步偷看:当加入到队列中的消息

MessageQueue queue = new MessageQueue(@".\PRIVATE$\Queue"); 
queue.BeginPeek(TimeSpan.Infinite, null, OnMessageAdded); 

注册的回调被调用。至于你没有解释你真正的问题是什么,我想你想了解添加到队列中的新邮件:

private void OnMessageAdded(IAsyncResult ar) 
{ 
    Message peekedMessage = queue.EndPeek(ar); 
    //Do whatever you want. Raise a new event, process the message, ... 
} 

邮件不会采取关闭队列。您可以使用该消息,但仍然保留在队列中。所以如果你不需要消息,你可以直接调用queue.EndPeek(ar);而不用结果。

+0

感谢您的帮助..从这里收到MSMQ后调用的函数,如果我没有错误..我想调用一个函数,当在MSMQ插入的东西.. –

+0

对不起,请使用BeginPeek和EndPeek。我会纠正答案。 – PVitt

+0

注意到一些事情:在新的.NET版本中不存在'TimeSpan.Infinite',但是'BeginPeek'方法在无限超时时不起作用,最大值为50天。 – Peroxy