Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Enumeración ApartmentState

 

Publicado: octubre de 2016

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

El Thread creará y entrará en un apartamento multiproceso.

STA

El Thread creará y entrará en un apartamento de subproceso único.

Unknown

El ApartmentState no se estableció la propiedad.

Un apartamento es un contenedor lógico dentro de un proceso para los objetos que comparten los mismos requisitos de acceso de subproceso. Todos los objetos en el mismo apartamento pueden recibir llamadas desde cualquier subproceso del apartamento. .NET Framework no utiliza apartamentos, y los objetos administrados son responsables de utilizar los recursos compartidos de una manera segura para subprocesos a sí mismos.

Dado que las clases COM utilizan apartamentos, common language runtime necesita para 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 contenedor uniproceso (STA) que permite que un único subproceso o un apartamento multiproceso (MTA) que contiene 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 sólo puede inicializar un apartamento COM una vez, no se puede cambiar el tipo de apartamento después de la primera llamada a 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 cómo 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);

        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
Disponible desde 1.1
Volver al principio
Mostrar: