69 lines
1.4 KiB
C#
69 lines
1.4 KiB
C#
using System;
|
|
|
|
namespace HandyControl.Data
|
|
{
|
|
public class DisposableObject : IDisposable
|
|
{
|
|
private EventHandler _disposing;
|
|
|
|
public bool IsDisposed { get; private set; }
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
~DisposableObject()
|
|
{
|
|
Dispose(false);
|
|
}
|
|
|
|
public event EventHandler Disposing
|
|
{
|
|
add
|
|
{
|
|
ThrowIfDisposed();
|
|
_disposing += value;
|
|
}
|
|
remove
|
|
{
|
|
_disposing -= value;
|
|
}
|
|
}
|
|
|
|
protected void ThrowIfDisposed()
|
|
{
|
|
if (IsDisposed) throw new ObjectDisposedException(GetType().Name);
|
|
}
|
|
|
|
protected void Dispose(bool disposing)
|
|
{
|
|
if (IsDisposed) return;
|
|
|
|
try
|
|
{
|
|
if (disposing)
|
|
{
|
|
_disposing?.Invoke(this, EventArgs.Empty);
|
|
_disposing = null;
|
|
DisposeManagedResources();
|
|
}
|
|
|
|
DisposeNativeResources();
|
|
}
|
|
finally
|
|
{
|
|
IsDisposed = true;
|
|
}
|
|
}
|
|
|
|
protected virtual void DisposeManagedResources()
|
|
{
|
|
}
|
|
|
|
protected virtual void DisposeNativeResources()
|
|
{
|
|
}
|
|
}
|
|
} |