ApartmentState

ApartmentState serializable

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
figs/csn2_4201.gif
 public enum  ApartmentState  {  STA = 0  ,  MTA = 1  ,  Unknown = 2  } 

Hierarchy

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

Returned By

Thread.ApartmentState

Passed To

Thread.ApartmentState

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


C# in a Nutshell
C # in a Nutshell, Second Edition
ISBN: 0596005261
EAN: 2147483647
Year: 2005
Pages: 963

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net