using System; using System.Runtime.ConstrainedExecution; namespace ScreenConnect; public abstract class CriticalFinalizerDisposableObject : CriticalFinalizerObject, IDisposable { public bool IsDisposed { get; private set; } ~CriticalFinalizerDisposableObject() { if (!IsDisposed) { Dispose(disposing: false); } } public void Dispose() { if (!IsDisposed) { Dispose(disposing: true); GC.SuppressFinalize(this); IsDisposed = true; } } protected abstract void Dispose(bool disposing); }