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 ...
Get C# in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.