System.Threading (mscorlib.dll)enum

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 = 2


System.Object System.ValueType System.Enum(System.IComparable, System.IFormattable, System.IConvertible) ApartmentState

Returned By


Passed To


Figure 42-2. Delegates, exceptions, and event arguments in the System.Threading namespace

    Part II: Programming with the .NET Framework
    Part IV: API Quick Reference
    Chapter 26. System