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 ...
Get C# in a Nutshell, Second Edition 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.