foreach
循环调用自动.dispose()
实现的对象IDisposable
。这是一个不错的功能,但假设您有以下功能:
public COMWrapper GetCOMWrapperByName(string COMWrapperName)
{
List<COMWrapper> COMWrapperList = GetCOMWrappersFromPlace();
foreach(COMWrapper cw in COMWrapperList)
{
if(cw.name == COMWrapperName)
return cs;
}
}
并且该方法发布了它关联COMWrapper
的.dispose()
COM 对象。
据我了解,foreach 循环将COMWrapper
在循环结束时处理每个循环,但随后离开匹配项COMWrapper
,因为它在到达语句结束之前返回。
COMWrapper
然而,对于列表中留下的引用来说,这成为一个问题,COMWrapperList
因为其中一半的底层 COM 对象 RCW 包装器已被删除,而它们本身并未被处理掉。更糟糕的是,列表的剩余一半完全不受管理的 COM 对象现在漂浮在以太中,并且由于COMWrapper
它们存在的对象尚未被处理,因此很难在语句中适当地遍历List
和调用(我们不t,毕竟要释放COM Objects两次)。.dispose()
finally
是否可以在不捕获异常的情况下确定 COM 对象是否已被释放ObjectDisposedException
?有没有更好的方法来处理剩余的 COM 对象及其包装器?或者,也许我完全误读了这种情况,需要重新评估我对 COM 对象的基本理解,我做错了什么?