2011-10-18 60 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