2011-04-17 46 views
1

我有一個實現SPItemEventReceiver事件處理程序的DLL。我喜歡在這個DLL中運行後臺線程。事件被傳遞到這個後臺線程進行處理,以便事件處理方法不會被阻塞。 SharePoint 2010加載DLL但線程無法啓動。我也無法使用ThreadPool類。這是SharePoint對外部事件處理程序施加的限制嗎?我該如何解決這個問題?SharePoint 2010的事件監聽器 - SPItemEventReceiver與多線程

+0

有在SharePoint的級別沒有限制,假設你沒有運行的沙盒解決方案。你能發佈代碼嗎? – 2011-04-17 16:27:47

+0

我不認爲這是必要的,因爲每個事件接收器是由發起事件的請求異步運行。基本上,我相信他們已經是後臺線程。換句話說,在事件接收者中長時間處理,我不認爲會阻止下一個射擊。 – Jason 2011-04-18 12:52:07

回答

2

假設你正在使用的「後」事件(ItemAdded,ItemUpdated),那麼你只需要其註冊爲異步模式。然後事件處理程序的事件將在其自己的線程中運行,而不是阻塞。

事件處理程序,並顯示你的編輯形式之間謹防競爭條件(即你的事件處理程序的編輯表單後,更新您的項目已顯示)。

SPEventReceiverDefinition eventReceiver = eventReceivers.Add(); 
eventReceiver.Name = receiverName; 
eventReceiver.Synchronization = SPEventReceiverSynchronization.Asynchronous; 
eventReceiver.Type = SPEventReceiverType.ItemAdded; 
eventReceiver.SequenceNumber = sequenceNumber; 
eventReceiver.Assembly = assemblyFullName ; 
eventReceiver.Class = assemblyClassName ; 
eventReceiver.Data = receiverData ; 

eventReceiver.Update(); 

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.speventreceiverdefinition.synchronization.aspx