我可以在终结器中调用Marshall.ReleaseComObject吗?

时间:2016-10-18 07:02:34

标签: c# .net dispose finalizer

我在代码基础代码上找到了这样的代码:

if (disposing)
{
    ....
}
Marshal.ReleaseComObject(comObject)

因为comObject实际上是一个.Net对象(一个RCW,对吗?)从Finalizer中调用它是否安全?

它可能已经被释放了吗?

1 个答案:

答案 0 :(得分:1)

正如Hans Passant所说:

  

不,这不安全,RCW已经拥有自己的终结者。哪一个   首先使代码完全没必要。更严重的是,   由于最终确定顺序不是确定性的,因此您可能正在调用   对已经销毁的对象的ReleaseComObject()

所以调用必须在if(disposing)中。