Объектная модель Outlook ContactItem не удалит
Я поражен этим. У меня есть приложение aC#, для которого мне необходимо создать резервную копию, прежде чем я изменю свой основной контакт. Но похоже, что копия застревает несмотря ни на что. Я проверяю это с помощью визуальной проверки содержимого папки с содержимым в Outlook.
У меня есть простой тестовый пример, как...
Application outlookApplication = new Application();
NameSpace outlookNamespace = outlookApplication.GetNamespace("mapi");
outlookNamespace.Logon("", "", true, true);
MAPIFolder Folder = outlookNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
MAPIFolder Folder2 = Folder.Folders["Test1"];
Items ContactItems = Folder2.Items;
foreach (ContactItem Contact in ContactItems)
{
ContactItem Backup = (ContactItem)Contact.Copy();
Backup.Delete();
break;
}
outlookNamespace.Logoff();
outlookNamespace = null;
Если я пытаюсь удалить его дважды, это вызывает ошибку. Даже пытался переместить его в папку удаленных элементов, но не повезло. Outlook 2010. Что происходит?
РЕДАКТИРОВАТЬ: ВРЕМЕННОЕ РЕШЕНИЕ: Если я создаю новый контакт и добавляю данные из оригинала, я могу просто удалить его.
1 ответ
Я не знаком с синтаксисом C#, но подозреваю, что это потому, что вы добавляете в коллекцию Items при создании копии. Я бы сделал это:
Перед началом цикла foreach проверьте количество ContactItems:
Items ContactItems = Folder2.Items;
' display ContactItems.Count here, is it Console.WriteLine(ContactItems.Count) ??
После создания копии снова проверьте ContactItems.Count. Если он увеличился, вам нужно изменить цикл на цикл "For i = ContactItems.Count to 1 Step -1" вместо цикла foreach (извините, я знаю только синтаксис VB, я не знаю эквивалентный синтаксис C#). Это должна быть обратная петля.
Если это не сработает, создайте копию и добавьте ее в другую папку "Контакты", чтобы она не мешала коллекции элементов папки, с которой вы работаете. Это похоже на то, что вы уже делаете.