COM uses apartment models to relieve the programmer of having to deal with threading issues.
However, this also adds some more complexity.
Different apartment types have been added with
different releases of the operating system.
This section discusses the single-threaded apartment and the
multithreaded apartment.
Single-threaded Apartment
The single-threaded apartment (STA) was introduced with Windows NT 3.51.
With an STA, only one thread (the thread that created the instance) is allowed to access the component. However, it is legal to
have multiple STAs inside one process, the inner rectangles with the lollipop represent COM components.
Components and threads (curved arrows) are surrounded by apartments.
The outer rectangle represents a process.
With STAs, there’s no need to protect instance variables from multiple thread access, because this protection is provided by a COM facility, and only one thread accesses the component.
A COM object that is not programmed with thread safety marks the requirements for an STA in the registry with the registry key ThreadingModel set to Apartment.
Multithreaded Apartment
Windows NT 4.0 introduced the concept of a multithreaded apartment (MTA).
With an MTA, multiple threads can access the component Simultaneously.
with one MTA arid two STAs.
Image
Process
STA1
STA2
A COM object programmed with thread safety in-mind marks the requirement for an MTA in the registry
with the key ThreadingModel set to Free.
The value Both is used for thread-safe COM objects that
don’t mind the apartment type.
Visual Basic 6.0 didn’t offer support for multithreaded apartments.
If you’re using COM objects that have been developed with VB6 that’s an important issue to know.