【发布时间】:2020-03-14 14:03:52
【问题描述】:
在 Outlook 中与 MailItems 交互时使用 Marshal.ReleaseComObject 有什么重要性?
我参考了创建 C# VSTO Outlook 插件的演练 https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in-for-outlook?view=vs-2019
他们有一个修改现有选定邮件项目的主题和正文的示例。
void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
{
Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.EntryID == null)
{
mailItem.Subject = "This text was added by using code";
mailItem.Body = "This text was added by using code";
}
}
}
示例结束时没有提及使用Marshal.ReleaseComObject 释放邮件项目对象。
但在https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.releasecomobject?view=netframework-4.8 的 .Net API 参考中,他们提到:
您应该使用此方法及时释放包含资源引用的底层 COM 对象,或者在必须按特定顺序释放对象时。
所以如果我们没有在我们引用的 MailItem 上使用 Marshal.ReleaseComObject 显然会有一些后果?
是否存在不使用 Marshal.ReleaseComObject 会导致问题的特定用例?
谢谢
【问题讨论】:
标签: c# outlook vsto outlook-addin office-addins