【问题标题】:Outlook Object Model ContactItem won't deleteOutlook 对象模型 ContactItem 不会删除
【发布时间】:2014-02-02 04:13:54
【问题描述】:

我对此感到困惑。我有一个 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;

如果我尝试将其删除两次,则会导致错误。 甚至尝试将其移动到已删除的项目文件夹,但没有运气。展望 2010。发生了什么?

编辑:解决方法:如果我创建一个新联系人并从原始联系人中填充,我可以将其删除。

【问题讨论】:

  • 嗨 JP,自从我找到了解决方法,我没有重新讨论这个问题。它仍然处于次要地位,只是不是一个高优先级。当我再次检查问题时,我会尝试您的答案并做出相应的回复。

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


【解决方案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# 语法)。它必须是一个反向循环。

如果这不起作用,则创建一个副本并将其添加到另一个联系人文件夹,这样它就不会干扰您正在使用的文件夹的项目集合。这与您已经在做的类似。

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 2014-07-17
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多