Esta documentación está archivada y no tiene mantenimiento.

Thread.TrySetApartmentState (Método)

Actualización: noviembre 2007

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 bool TrySetApartmentState(
	ApartmentState state
)
/** @attribute HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, SelfAffectingThreading = true) */
public boolean TrySetApartmentState(
	ApartmentState state
)
public function TrySetApartmentState(
	state : ApartmentState
) : boolean

Parámetros

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

Valor devuelto

Tipo: System.Boolean
Es true si se ha establecido el estado de tipo apartamento; en caso contrario, es false.

ExcepciónCondición
ArgumentException

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

ThreadStateException

El subproceso ya se ha iniciado.

87e2f83w.alert_note(es-es,VS.90).gifNota:

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el siguiente valor de la propiedad Resources: 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 de SQL Server y atributos de protección del host.

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.

87e2f83w.alert_note(es-es,VS.90).gifNota:

El subproceso de 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 TrySetApartmentState, junto con los métodos GetApartmentState y SetApartmentState, reemplaza la propiedad ApartmentState.

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.
 */


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0
Mostrar: