【问题标题】:Ensuring Dispose is called when .net class expsed to COM确保当 .net 类暴露给 COM 时调用 Dispose
【发布时间】:2010-08-19 05:20:44
【问题描述】:

我已经向 COM 公开了一个 .net 类。该类继承自 IDisposable,因为我需要清理一些非托管资源。在 .net 环境中,我会将我的类包装在 using 范围内,以确保始终调用 Dispose()。如果我使用 COM 包装器,是否有一些工具可以做到这一点?我正在实例化 VB6 中的类,我想确保调用 Dispose,或者我应该相信它最终会被 CLR 调用

【问题讨论】:

    标签: .net com idisposable


    【解决方案1】:

    Dispose 不会被自动调用,但终结器会。如果您有非托管资源而不需要清理,请实现一个调用 Dispose() 的终结器。实现另一种方法是常见的做法,Dispose(bool disposing) 使用来自 IDisposable.Dispose() 的true 和来自终结器的false 调用。如果 disposing 为 true,您应该清理所有托管资源(如果需要)并调用 GC.SuppressFinalize(this)

    【讨论】:

      【解决方案2】:

      我的理解(可能相当生疏)是 COM 可调用包装器 (CCW) 在 COM 对象的引用计数降至 0 时不会调用 Dispose() - 它只是不再引用 CLR 对象。

      您需要要求对象的用户显式调用Dispose(),如果他们不这样做,则依靠终结器进行清理。

      其他一些可能会有所帮助的想法:

      【讨论】:

        猜你喜欢
        • 2011-02-07
        • 2011-08-12
        • 2013-09-09
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-08
        相关资源
        最近更新 更多