Exportar (0) Imprimir
Expandir todo
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

Thread.SetApartmentState (Método)

Establece el estado de tipo apartamento de un subproceso antes de iniciarse.

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

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	SelfAffectingThreading = true)]
public void SetApartmentState(
	ApartmentState state
)

Parámetros

state
Tipo: System.Threading.ApartmentState
Nuevo estado de tipo apartamento.

ExcepciónCondición
ArgumentException

state no es un estado de tipo apartamento válido.

ThreadStateException

Ya se inició el subproceso.

InvalidOperationException

El estado de apartamento ya se ha inicializado.

Los nuevos subprocesos se inicializan como ApartmentState.MTA si su estado de apartamento no se ha fijo antes de que se inicien. El estado de apartamento se debe establecer antes de que se inicie un subproceso.

NotaNota

El subproceso de la aplicación principal se inicializa de forma predeterminada en ApartmentState.MTA. La única forma de establecer el estado de apartamento del subproceso de la aplicación principal en ApartmentState.STA es aplicar el atributo STAThreadAttribute al método de punto de entrada.

El método SetApartmentState, junto con los métodos GetApartmentState y TrySetApartmentState, reemplaza la propiedad ApartmentState.

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el valor de propiedad Resources siguiente: Synchronization | SelfAffectingThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

En el ejemplo de código siguiente se muestran los métodos GetApartmentState, SetApartmentState y TrySetApartmentState. En el ejemplo de código se crea un subproceso. Antes de que se inicie el subproceso, GetApartmentState muestra el estado inicial deApartmentState.Unknown y SetApartmentState cambia el estado a ApartmentState.STA. El método TrySetApartmentState devuelve false al intentar cambiar el estado a ApartmentState.MTA, porque el estado de apartamento ya está establecido. Si se hubiera intentado la misma operación SetApartmentState, se habría iniciado una InvalidOperationException.

Una vez que se inicia el subproceso, se vuelve a utilizar el método TrySetApartmentState. Ahora inicia la excepción ThreadStateException, porque el subproceso ya se ha iniciado.


using System;
using System.Threading;

class Example
{
    public static void Main()
    {
        Thread t = new Thread(ThreadProc);
        Console.WriteLine("Before setting apartment state: {0}", 
            t.GetApartmentState());

        t.SetApartmentState(ApartmentState.STA);
        Console.WriteLine("After setting apartment state: {0}", 
            t.GetApartmentState());

        bool result = t.TrySetApartmentState(ApartmentState.MTA);
        Console.WriteLine("Try to change state: {0}", result);

        t.Start();

        Thread.Sleep(500);

        try
        {
            t.TrySetApartmentState(ApartmentState.STA);
        }
        catch (ThreadStateException)
        {
            Console.WriteLine("ThreadStateException occurs " +
                "if apartment state is set after starting thread.");
        }

        t.Join();
    }

    public static void ThreadProc()
    {
        Thread.Sleep(2000);
    }
}

/* This code example produces the following output:

Before setting apartment state: Unknown
After setting apartment state: STA
Try to change state: False
ThreadStateException occurs if apartment state is set after starting thread.
 */


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.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