Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ApartmentState (Enumeración)

Especifica el estado de apartamento de un Thread.

Espacio de nombres:  System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum ApartmentState

Nombre de miembroDescripción
MTA Thread creará y entrará en un apartamento multiproceso.
STA Thread creará y entrará en un contenedor uniproceso.
UnknownNo se ha establecido la propiedad ApartmentState.

Un apartamento es un contenedor lógico dentro de un proceso para objetos que comparten los mismos requisitos de acceso al subproceso. Todos los objetos que se encuentran en el mismo apartamento pueden recibir llamadas de cualquier subproceso del apartamento. .NET Framework no utiliza apartamentos, y los objetos administrados son responsables de utilizar los recursos compartidos de forma segura para la ejecución de subprocesos.

Dado que las clases COM utilizan apartamentos, Common Language Runtime necesita crear e inicializar un apartamento cuando llama a un objeto COM en una situación de interoperabilidad COM. Un subproceso administrado puede crear y entrar en un contenedor uniproceso (STA) que sólo acepte un subproceso, o un apartamento multiproceso (MTA) que contenga uno o varios subprocesos. Puede controlar el tipo de apartamento creado estableciendo la propiedad ApartmentState del subproceso en uno de los valores de la enumeración ApartmentState. Puesto que un subproceso determinado sólo puede inicializar un apartamento COM una única vez, no se puede cambiar el tipo de apartamento después de la primera llamada al código no administrado.

Para obtener más información, vea Thread, Subprocesamiento administrado y no administrado y Interoperabilidad COM avanzada.

En el ejemplo de código siguiente se muestra la forma de establecer el estado de apartamento de un subproceso.


using System;
using System.Threading;

class ApartmentTest
{
    static void Main()
    {
        Thread newThread = 
            new Thread(new ThreadStart(ThreadMethod));
        newThread.SetApartmentState(ApartmentState.MTA);

        // The following line is ignored since 
        // ApartmentState can only be set once.
        newThread.SetApartmentState(ApartmentState.STA);

        Console.WriteLine("ThreadState: {0}, ApartmentState: {1}", 
            newThread.ThreadState, newThread.ApartmentState);

        newThread.Start();

        // Wait for newThread to start and go to sleep.
        Thread.Sleep(300);
        try
        {
            // This causes an exception since newThread is sleeping.
            newThread.SetApartmentState(ApartmentState.STA);
        }
        catch(ThreadStateException stateException)
        {
            Console.WriteLine("\n{0} caught:\n" +
                "Thread is not in the Unstarted or Running state.", 
                stateException.GetType().Name);
            Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
                newThread.ThreadState, newThread.GetApartmentState());
        }
    }

    static void ThreadMethod()
    {
        Thread.Sleep(1000);
    }
}


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft