Yes, a COM object tends to have an affinity for flow. Threading is not a minor part of a COM implementation. Unlike .NET, COM provides thread safety guarantees for a COM class. COM can publish the kind of streaming it supports, and "flat" (i.e., "Non-thread safe") is a very common choice. COM ensures that these requirements are met if the program does not do anything to help. Marching a call from one thread to another so that the object is always used in a thread-safe manner is automatic. In .NET code, you usually have to do it yourself, for example, using Control.BeginInvoke or Dispatcher.BeginInvoke.
, , COM-, , . , . . , , , . , , , Dispatcher.BeginInvoke .NET.
Fwiw, , Marshal.ReleaseComObject() . -, . GC COM . . , COM- , , , .NET, : GC.Collect() . , Marshal.ReleaseComObject() .