public void Dispose()
{
Dispose(true);
// Call SuppressFinalize, even though we don't have a finalizer.
// This is because a derived type may add a finalizer, and they
// should not have to reimplement the Dispose pattern.
GC.SuppressFinalize(this);
}