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 ...
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