问题描述
我面临以下问题
COM object that has been separated from its underlying RCW cannot be used.'
System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.
at System.StubHelpers.StubHelpers.GetCOMIPFromrCW(Object objSrc,IntPtr pCPCMD,IntPtr& ppTarget,Boolean& pfNeedsRelease)
at Microsoft.Office.Interop.Outlook._MailItem.get_Subject()
以下代码:
var mail = inspectorWrapper.MailItem;
showcaseModel.Subject = mail?.Subject;
showcaseModel.Title = mail?.Subject;
我怎样才能避免这种异常?
我应该用 Marshal.ReleaseComObject(mail)
释放邮件对象吗?
?
解决方法
这是一个很好的指标,表明您需要检查加载项的代码并检查所有 Marshal.ReleaseComObject
语句。
如果您的加载项代码中没有此类语句,则表明您正尝试在代码中使用来自 OOM 的不可用对象。例如,打开一个新的检查器窗口,您可以在其中检索对邮件项的对象引用并将其保存在代码中。但是用户可以发送此类项目,因此您的对象引用与底层 COM 对象分离。它只是不再有效 - 该项目已移动到另一个文件夹(或删除,如果在项目上设置了 DeleteAfterSubmit
属性)。
建议相同 - 检查您的源代码。