TrySetApartmentState (Método)

Thread.TrySetApartmentState (Método)

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

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

public bool TrySetApartmentState (
	ApartmentState state
)
public boolean TrySetApartmentState (
	ApartmentState state
)
public function TrySetApartmentState (
	state : ApartmentState
) : boolean
No aplicable.

Parámetros

state

Nuevo estado de tipo apartamento.

Valor devuelto

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

Tipo de excepciónCondición

ArgumentException

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

ThreadStateException

El subproceso ya se ha iniciado.

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

NotaNota:

El atributo HostProtectionAttribute aplicado a este método tiene el valor de propiedad Resources siguiente: Synchronization | SelfAffectingThreading. HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician al hacer doble clic en un icono, escribir un comando o escribir una dirección URL en un explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación de SQL Server y atributos de protección del 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.
 */

Windows 98, Windows 2000 Service Pack 4, Windows Millennium, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
Mostrar:
© 2016 Microsoft