The GC does not call Dispose, it calls your finalizer (which you should make call Dispose(false)).
Please look at the related posts on the side or look up the C# best practices for the Dispose pattern (The docs on IDisposable explain it quite well IIRC.)