12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- using System;
- namespace Wayne.Lib
- {
-
-
-
-
-
- public abstract class DisposableBase : IDisposable
- {
- private readonly object disposedLock = new object();
- private bool disposed;
- private bool disposeRunning;
-
- ~DisposableBase()
- {
- Dispose(false);
- }
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- private void Dispose(bool disposing)
- {
- if (disposing)
- {
- lock (disposedLock)
- {
- if (disposed || disposeRunning)
- {
- return;
- }
- disposeRunning = true;
- }
- try
- {
- DoDispose();
- }
- finally
- {
- lock (disposedLock)
- {
- disposed = true;
- disposeRunning = false;
- }
- }
- }
- }
- protected bool IsDisposed
- {
- get { return disposed || disposeRunning; }
- }
-
-
-
- protected abstract void DoDispose();
- }
- }
|