从VB6调用时,为什么Dispose似乎不起作用?

时间:2017-05-12 21:40:18

标签: c# com

我有一个COM可见的C#程序。

我做:

public class Image
{
    private float height;

    public void Init(string path) {
        using (System.Drawing.Image image = System.Drawing.Image.FromFile(path)) {
            height = image.PhysicalDimension.Height;
        }
    }
}

...正如您所期望的那样,从VB6调用Init时图像被正确处理。

但是当使用以下内容,并且从VB6调用Dispose 时,即使调用了Dispose(),路径指向的图像也不会被释放:

public class Image
{
    private bool disposed = false;
    System.Drawing.Image image = null;

    public void Init(string path) {
        if (null != image) {
            image.Dispose();
            image = null;
        }
        image = System.Drawing.Image.FromFile(path);
    }

    ~Image() {
        Dispose(false);
    }

    public void Dispose() {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    public virtual void Dispose(bool disposing) {
        if (disposed) return;
        if (null != image) {
            image.Dispose();
            image = null;
        }
        disposed = true;
    }
}

为什么在C#类上从VB6二进制文件调用Dispose似乎不起作用但是using语句有效?

注意:我确定VB6正在调用Dispose()。它不是有条件的,并且日志记录在实际代码中证明我们在Dispose()调用之后执行语句。

0 个答案:

没有答案