Я работаю над приложением SharePoint, которое поддерживает импорт нескольких документов за одну операцию. У меня также есть обработчик событий ItemAdded, который выполняет базовое обслуживание метаданных элемента. Это событие возникает как для импортированных документов, так и для созданных вручную. Последний кусок головоломки - это функция пакетной операции, которую я реализовал, чтобы запустить рабочий процесс и обновить другое поле метаданных.
Я могу вызвать COMException 0x81020037, извлекая данные файла из SPListItem. Этот файл представляет собой просто форму InfoPath / XML-документ. Я могу изменить XML и успешно вернуть его в SPListItem. Когда я сразу же выключаю настраиваемую функцию и изменяю метаданные, это иногда вызывает ошибку COM.
Сообщение об ошибке в основном указывает на то, что файл был изменен другим потоком. Казалось бы, событие ItemAdded все еще записывает файл обратно в базу данных, в то время как настраиваемая функция изменяет метаданные. Я попытался ввести задержки и циклы обнаружения ошибок, чтобы попытаться определить, что SPListItem можно безопасно изменять, но без особого успеха.
Есть ли способ узнать, заблокировал ли документ другой поток?