删除多个 Outlook 任务

Deleting multiple Outlook tasks

我想删除多个Outlook.TaskItem。要删除的任务存储在 List 中。我遍历列表中的每个项目,并按照以下方式一个一个地删除每个 outlook 任务:

resultItems = folderItems.Restrict(restrictCriteria);
item = resultItems.GetFirst();
Outlook.MailItem mail = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
List<Outlook.TaskItem> taskList = new List<Outlook.TaskItem>();
do
{
   if (item != null)
    {if (item is Outlook.TaskItem)
        {taskItem = item as Outlook.TaskItem;
         if (taskItem.CreationTime >= date)
          {  log.Info("Attaching task : " + taskItem.Subject + " created at 
             " + taskItem.CreationTime);
             taskList.Add(taskItem);
             mail.Attachments.Add(taskItem);
          }                        
         }
               Marshal.ReleaseComObject(item);
               item = resultItems.GetNext();
     }
 }while (item != null);
 foreach (Outlook.TaskItem tItem in taskList)
    {
        log.Info("Deleting task with subject :" + tItem.Subject);
        tItem.Delete();
    }

但是它抛出这个异常: The COM object has been separated from its underlying RCW cannot be used

堆栈跟踪:

System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
   at Microsoft.Office.Interop.Outlook._TaskItem.get_Subject()
   at TMTimeCapture.ThisAddIn.DeleteMyTasks(MAPIFolder folder) 

我尝试在 tItem.Delete(); 之后添加 Marshal.ReleaseComObject(tItem) 也无济于事。

根据日志,此异常甚至在生成第一次迭代的日志之前就发生了。 有人可以建议我哪里出错了吗?删除多个任务的正确方法应该是什么?

编辑 2:在遍历任务以删除它们之前,我遍历同一个列表并将任务附加到 mailItem 并发送该邮件。我怀疑先前的迭代和 Marshal.ReleaseComObject(item); 的使用是否会在删除任务的下一个循环中引起问题。我已经更新了代码。请根据更新的上下文提出建议。

除了删除对 Marshal.ReleaseComObject 的调用外,您还可以使用 List<string> 并存储 TaskItem.EntryID 属性。当您需要删除任务时,您可以先使用Application.Session.GetItemFromID打开它们,然后调用TaskItem.Delete