See the question and my original answer on StackOverflow

You shouldn't need to use a lock around your objects as the whole purpose of COM Threading is making your life easier and automatic (once you understand its use, and if the registry is correct) in multi-threading environments.

In standard managed .NET scenarios, you don't need to do anything specific either, even releasing the COM object should be done automatically by the garbage collector. So you shouldn't need a using pattern.

That being said, it may be possible that the underlying unmanaged COM object works better when it's released once used, or maybe your application can't really wait for the GC to happen for some reason (because of a hi usage for example). In these scenarios, you can use Marshal.ReleaseComObject or Marshal.FinalReleaseComObject to force the release of the COM object once used, and wraps it using a wrapper object.