Leer en inglés

Compartir a través de


ApartmentState Enumeración

Definición

Especifica el estado de apartamento de un Thread.

C#
public enum ApartmentState
C#
[System.Serializable]
public enum ApartmentState
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ApartmentState
Herencia
ApartmentState
Atributos

Campos

MTA 1

Thread creará y entrará en un apartamento multiproceso.

STA 0

Thread creará y entrará en un contenedor uniproceso.

Unknown 2

No se ha establecido el valor de la propiedad ApartmentState.

Ejemplos

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

C#
using System;
using System.Threading;

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

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

        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);
    }
}

Comentarios

Un apartamento es un contenedor lógico dentro de un proceso para objetos que comparten los mismos requisitos de acceso a subprocesos. Todos los objetos del mismo apartamento pueden recibir llamadas desde cualquier subproceso del apartamento. El .NET Framework no usa apartamentos y los objetos administrados son responsables de usar todos los recursos compartidos de manera segura para subprocesos.

Dado que las clases COM usan apartamentos, Common Language Runtime debe crear e inicializar un apartamento al llamar a un objeto COM en una situación de interoperabilidad COM. Un subproceso administrado puede crear y escribir un apartamento de un solo subproceso (STA) que permita solo un subproceso o un apartamento multiproceso (MTA) que contenga uno o varios subprocesos. Puede controlar el tipo de apartamento creado estableciendo la ApartmentState propiedad del subproceso en uno de los valores de la ApartmentState enumeración. Dado que un subproceso determinado solo puede inicializar un apartamento COM una vez, no 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, Subprocesos administrados y no administrados y Interoperabilidad COM avanzada.

Se aplica a

Producto Versiones
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1

Consulte también