Объектная модель Outlook ContactItem не удаляется

Я озадачен этим. У меня есть приложение С#, для которого мне нужна резервная копия, прежде чем я изменю свой основной контакт. Но похоже, что копия остается, несмотря ни на что. Я проверяю это путем визуальной проверки содержимого папки с содержимым в 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. Что происходит?

РЕДАКТИРОВАТЬ: ВРЕМЕННОЕ РЕШЕНИЕ: если я создам новый контакт и заполню его из оригинала, я могу удалить его без проблем.


person Jahmic    schedule 26.07.2011    source источник
comment
Привет, JP, так как я нашел свой обходной путь, я не возвращался к этой проблеме. Это все еще на втором плане, просто не в приоритете. Когда я снова проверю проблему, я попробую ваш ответ и отвечу соответственно.   -  person Jahmic    schedule 17.11.2011


Ответы (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#). Это должна быть обратная петля.

Если это не сработает, создайте копию и добавьте ее в другую папку «Контакты», чтобы она не мешала коллекции элементов папки, с которой вы работаете. Это похоже на то, что вы уже делаете.

person JimmyPena    schedule 30.08.2011