Maybe you should limit the objects lifetime to the lifetime of the thread. Currently the object is destroyed at any time by the GC in the GC thread. Try calling Marshal.ReleaseComObject before the thread ends, to guarantee a deterministic lifetime of the object.