Outlook: 释放使用委托检索的COM对象

问题描述 投票:0回答:1

仅仅为了争论,让我们假设你使用的是 附件 集合,这个集合实现了IEnumerable。 这个集合实现了IEnumerable。

如果我们要做这样的事情,幕后到底发生了什么?"通过集合的每一次迭代都会创建一个不能释放的 "AttachmentS "对象吗?

  void SomeEventHandler( Attachments attachments, object args )
  {
      Outlook._Attachment attachment = attachments.First( x => x.Subject == "I like COM" );

     // do stuff
     Marshal.ReleaseComObject(attachment);
  }

第一 将迭代COM对象的集合。 它是否会像 读取 并造成我们无法释放的COM引用?

com outlook-addin outlook-redemption
1个回答
1
投票

它会不会像foreach一样,造成我们无法释放的COM引用?

是的,会的。使用 for 循环与代码中的释放语句代替。不建议对Office RCW对象使用LINQ、lambda表达式等。继而无法及时释放COM对象。

为了了解 First 我建议查看.net框架编译器生成的CIL(或MSIL)代码。

© www.soinside.com 2019 - 2024. All rights reserved.