SetApartmentState Método (ApartmentState)
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) (ApartmentState)

 

Establece el estado del 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

Nuevo estado del apartamento.

Exception Condition
ArgumentException

state no es un estado de apartamento válido.

ThreadStateException

Ya se ha iniciado el subproceso.

InvalidOperationException

El estado de apartamento ya se ha inicializado.

Los nuevos subprocesos se inicializan como ApartmentState.MTA Si no se ha establecido su estado de apartamento antes de que se inicien.Estado del apartamento se debe establecer antes de que se inicia un subproceso.

System_CAPS_noteNota

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

El SetApartmentState (método), junto con el GetApartmentState (método) y el TrySetApartmentState método, reemplaza el ApartmentState propiedad.

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

Una vez iniciado el subproceso, la TrySetApartmentState método se utiliza de nuevo.Esta vez inicia ThreadStateException porque ya se ha iniciado el subproceso.

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
Disponible desde 2.0
Volver al principio
Mostrar:
© 2016 Microsoft