public void Dispose() { _disposerLock.EnterWriteLock(); try { if (_disposed) return; GC.SuppressFinalize(this); DisposeInternal(); } finally { _disposed = true; _disposerLock.ExitWriteLock(); } }