c# - 无法使用 Microsoft.Office.Interop.Outlook 使用已与其基础 RCW 分离的 COM 对象
问题描述
我面临以下问题
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
项目上设置了属性)。
建议是相同的 - 检查您的源代码。
推荐阅读
- mysql - DATE_FORMAT 两次在 Where 子句不起作用
- r - 如何将属性值列表分配给R中的单个属性
- android - 打包用react native创建的应用后,我们得到的是纯native代码文件吗?
- mongodb - 反应本机-local-mongoDb-无法读取未定义的属性
- asp.net-mvc - 在 MVC 中将默认值绑定到 TextBoxFor 不起作用
- c# - 来自接口的 Observablecollection 通过绑定添加到列表视图
- wpf - WPF使用视图更改父属性
- r - 在 R 中使用活动绑定复制和分离对象
- azure - Azure SQL 数据仓库中的用户和应用程序服务帐户设置
- javascript - 为所有浏览器选项卡设置 Cookie