Thread Safety
The classes follow the standard .NET convention of requiring callers to handle their own locking. This way, callers do not pay the price for synchronization when not sharing instances concurrently across multiple threads.
The IDisposable pattern is implemented by the following classes, to help support the timely release of underlying COM resources.