我有一个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()调用之后执行语句。