Outlook对象模型ContactItem不会删除

时间:2011-07-26 11:24:53

标签: outlook out-of-memory outlook-addin outlook-object-model

我为此感到困惑。在修改主要联系人之前,我有一个需要备份的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 :(得分:0)

我不熟悉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#语法)。它必须是一个向后循环。

如果这不起作用,则创建一个副本并将其添加到另一个“联系人”文件夹,这样就不会干扰您正在使用的文件夹的Items集合。这类似于你现在正在做的事情。