我在代码基础代码上找到了这样的代码:
if (disposing)
{
....
}
Marshal.ReleaseComObject(comObject)
因为comObject实际上是一个.Net对象(一个RCW,对吗?)从Finalizer中调用它是否安全?
它可能已经被释放了吗?
答案 0 :(得分:1)
正如Hans Passant
所说:
不,这不安全,RCW已经拥有自己的终结者。哪一个 首先使代码完全没必要。更严重的是, 由于最终确定顺序不是确定性的,因此您可能正在调用 对已经销毁的对象的ReleaseComObject()
所以调用必须在if(disposing)中。