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