protected void Dispose(bool disposing) { if(Interlocked.CompareExchange(ref _isDisposed, 1, 0) == 0) { _isDisposing = true; try { if(disposing) { GC.SuppressFinalize(this); DisposeOfManagedResources(); } } finally { _isDisposing = false; } } }