SharePoint 2010事件侦听器 - 具有多线程的SPItemEventReceiver

时间:2011-04-17 16:24:14

标签: c# .net sharepoint sharepoint-2010

我有一个实现SPItemEventReceiver的事件处理程序DLL。我喜欢在这个dll中运行后台线程。事件将传递到此后台线程进行处理,以便事件处理方法不会阻塞。 SharePoint 2010加载dll但线程无法启动。我也无法使用ThreadPool类。这是SharePoint对外部事件处理程序施加的限制吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

假设您正在使用'post'事件(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