4
我有一个COM类型(使用tlbimp.exe创建)和一个包装这个对象的C#类。我想在我的C#包装器的终结器中执行一些清理。继准则here我可能会写这样的事:我可以在我的终结器中引用/使用COM对象吗?
public class MyClass : IDisposable
{
private IMyComObject comObject;
public MyClass()
{
comObject = new MyComObject();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~MyClass()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
// Be tollerant of partially constructed instances
if (comObject != null)
{
comObject.Cleanup();
// Account for object being disposed twice
comObject = null;
}
}
// Other bits go here...
}
我知道,终结器可以按任意顺序运行,所以我不应该尝试使用它实现了一个终结的任何对象,但据我可以告诉TLBIMP生成的COM类型不实现一个终结器,所以上面应该没问题。
我还没有找到任何官方文档,所以我的问题是在终结器中引用和使用COM对象是否安全?
你尝试在你的Dispose方法的开始调用GC? – Bond
他们*实现了一个终结器,这就是COM对象被释放的方式。所以,不,这是不安全的。 –
@HansPassant我曾经认为,但我找不到任何文档说明这一点,我也看不到反汇编中的终结器 – Justin