例外:“由于消息已被更改,因此无法执行操作。”

时间:2015-03-03 16:52:49

标签: c# outlook-addin

我有代码:

public void ExportEmail(Microsoft.Office.Core.IRibbonControl control)
{
   MailItem mailItem = this.extractor.ExtractMailItem(control);
   mailItem.MessageClass = "Bla bla";
   mailItem.Save();//Exception after second call
   //edit code////
   System.Runtime.InteropServices.Marshal.ReleaseComObject(mailItem);
   mailItem = null;
   ///////////////
   this.eventAggregator.GetEvent<ExportEmailEvent>().Publish(mailItem);
}

当我第一次按下按钮时,此代码正常工作。但第二次我得到例外:

  

System.Runtime.InteropServices.COMException {“操作不能   已执行,因为邮件已更改。“}

异常在mailItem.Save();

1 个答案:

答案 0 :(得分:1)

首先,我建议发布基础COM对象。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。您可以在Systematically Releasing Objects文章中详细了解相关内容。

第一次通话后邮件类是否已更改?你尝试调试代码了吗?有什么区别吗?这是一条新消息(尚未保存)吗?