Files
HandyControl/src/Shared/HandyControl_Shared/Data/DisposableObject.cs
T
2020-01-18 14:23:47 +08:00

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()
{
}
}
}