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.
public enum ApartmentState { STA = 0, MTA = 1, Unknown = 2 }
Hierarchy
System.Object→System.ValueType ...