我有代码:
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();
。
答案 0 :(得分:1)
首先,我建议发布基础COM对象。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。您可以在Systematically Releasing Objects文章中详细了解相关内容。
第一次通话后邮件类是否已更改?你尝试调试代码了吗?有什么区别吗?这是一条新消息(尚未保存)吗?