Bei einem Massenupload kann es nötig sein, den Eventreceiver einer Liste zu deaktivieren. Damit entgeht man konkurrierenden Zugriffen und ggf. wird die Performance positiv beeinflusst.
Zum Deaktivieren:
1: List<SPEventReceiverDefinition> eventRevc = new List<SPEventReceiverDefinition>();
2: SPEventReceiverDefinitionCollection currentRcv = lib.EventReceivers;
3: foreach (SPEventReceiverDefinition rcv in currentRcv)
4: { 5: eventRevc.Add(rcv);
6: lib.EventReceivers[rcv.Id].Delete();
7: }
Dann die gewünschte Massenaktion durchführen und die Receiver wieder aktivieren:
1: foreach (SPEventReceiverDefinition rcv in eventRevc)
2: { 3: lib.EventReceivers.Add(rcv.Type, rcv.Assembly, rcv.Class);
4: }
Zu beachten ist, dass das Deaktivieren und Aktivieren einige Performance frisst. Man sollte sich also sehr bewusst sein, wann man dies so einsetzt!
UPDATE:
Die Aktion, die zwischen Deaktivieren und Aktivieren ausgeführt wird, sollte unbedingt in in try catch block - das Aktivieren folglich in den finally Block. Dadurch wird erreicht, dass die Eventhandler auch im Fehlerfall wieder hinzugefügt werden.