我正在构建一个派生自Stream
的类来包装COM IStream。然而,我遇到了一个问题,我需要毫不犹豫地发布COM IStream。实现对从流派生的类进行处理
好吧,这很容易,只需在Dispose
方法中使用Marshal.ReleaseComObject
即可。不过我不确定那很简单。 Stream
基类已具有受保护的虚拟方法Dispose(boolean)
。这是我的第一个想法: -
~ComStreamWrapper()
{
if (!_Disposed)
{
iop.Marshal.FreeCoTaskMem(_Int64Ptr);
iop.Marshal.ReleaseComObject(_IStream);
}
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (!_Disposed)
{
if (disposing)
{
iop.Marshal.FreeCoTaskMem(_Int64Ptr);
iop.Marshal.ReleaseComObject(_IStream);
}
_Disposed = true;
}
}
你会注意到有没有执行Dispose()
本身。我目前正在做假设,Stream
现有的实施做我所需要的。这就是要求Diposing(true)
和GC.SuppressFinalize
。这个假设是错误的吗?
我错过了什么吗?有更好的方法吗?你在这个answer中看到了更多的基础课程来解决一个更加棘手的问题。
bas类已经有了一个析构函数(Finalizer)。 – 2010-04-26 14:07:42
流类是抽象的,没有终结器。 – 2010-04-26 14:23:53
看来你是对的,我的错误。 – 2010-04-26 15:16:42