【发布时间】:2016-10-18 07:02:34
【问题描述】:
我在我们的代码库中发现了这样的代码:
if (disposing)
{
....
}
Marshal.ReleaseComObject(comObject)
由于 comObject 实际上是一个 .Net 对象(一个 RCW,对吗?)从 Finalizer 调用它是否安全?
有没有可能已经发布了?
【问题讨论】:
-
不,这不安全,RCW 已经有自己的终结器。首先,这使得代码完全没有必要。更严重的是,由于完成顺序不是确定性的,您可能会在已销毁的对象上调用 ReleaseComObject()。
-
谢谢,如果您将其作为答案,我会将其标记为解决方案。
-
您确定可以发布更好的答案吗?我不知道当你在一个被破坏的对象上调用 ReleaseComObject() 时会发生什么,我从来没有故意弄错这个。
-
@HansPassant:对不起,我没听懂。我只是要求将评论移至答案,以便我可以将其标记为已接受的答案,因为我无法在评论中执行此操作。