Ler en inglés

Compartir por


Thread.GetApartmentState Método

Definición

Devuelve un valor ApartmentState que indica el estado del apartamento.

C#
public System.Threading.ApartmentState GetApartmentState();

Devoluciones

Uno de los valores de ApartmentState que indica el estado del apartamento del subproceso administrado. De manera predeterminada, es Unknown.

Ejemplos

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

Una vez iniciado el subproceso, se vuelve a usar el TrySetApartmentState método . Esta vez se produce porque el subproceso ThreadStateException ya se ha iniciado.

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

Comentarios

Este método, junto con el SetApartmentState método y el TrySetApartmentState método , reemplaza la ApartmentState propiedad .

Se aplica a

Produto Versións
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1