Объектная модель Outlook ContactItem не удалит - PullRequest
0 голосов
/ 26 июля 2011

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

0 голосов
/ 30 августа 2011

Я не знаком с синтаксисом 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 #). Это должна быть обратная петля.

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

...