public class Foo : IDisposable
{
private bool _disposed;
private object _obj=new object();
public void Dispose()
{
Dispose(true);
// 请求公共语言运行时不要调用该对象上的终结器(在C#中就是指不要调用析构函数)
GC.SuppressFinalize(this);
}
[System.Runtime.InteropServices.DllImport("Kernel32")]
private extern static Boolean CloseHandle(IntPtr handle);
protected virtual void Dispose(bool disposing)
{
// 保证线程安全
lock (_obj)
{
if (!_disposed)
{
if (disposing)
{
// Release managed resources
}
// Release unmanaged resources
_disposed = true;
}
}
}
public void Close()
{
Dispose();
}
~Foo()
{
Dispose(false);
}
}