Name
ApartmentState
Synopsis
This type is entirely unnecessary for “normal” .NET code; it is needed only for COM interoperability capability.
Apartments are a COM-threading construct. There are two
threading
apartments: single-threaded
(STA) and multithreaded
(MTA). Once a thread joins an apartment, it cannot
join another one. If you want to create or access a COM object from a
thread, that thread must belong to an apartment. Further, a given COM
component may only be compatible with a certain apartment
state.
What if an STA thread needs to call a method on a
COM object that is only compatible with MTA
threads? In that case, a different thread that is already in the
MTA state must service the request. The COM
Service Control Manager either creates a new thread or uses one
allocated for servicing remote procedure calls to accomplish this
Threads in an MTA apartment cannot directly access
STA threads either. Instead, the
STA thread contains a message sink, and the method
is invoked when the thread in that apartment is free. .NET objects do
away with this requirement; however, if some of the threads call COM
objects, they must first join an apartment. The
Thread class usually handles this automatically,
but you can join an apartment directly by assigning a parameter from
this enumeration to the Thread.ApartmentState
property. Unknown indicates that the thread has
not joined an apartment.
Figure 42-1. The System.Threading namespace
public enum ApartmentState { STA = 0, MTA = 1, Unknown ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access