Прочитать на английском

Поделиться через


Thread.GetApartmentState Метод

Определение

Возвращает значение типа ApartmentState, показывающее состояние апартамента.

public System.Threading.ApartmentState GetApartmentState();

Возвращаемое значение

Одно из значений ApartmentState, показывающее состояние подразделения управляемого потока. Значение по умолчанию — Unknown.

Примеры

В следующем примере кода демонстрируются методы GetApartmentState, SetApartmentStateи TrySetApartmentState . В примере кода создается поток. Перед запуском GetApartmentState потока отображает начальное ApartmentState.Unknown состояние и SetApartmentState изменяет состояние на ApartmentState.STA. Затем TrySetApartmentState метод возвращает значение false при попытке изменить состояние на ApartmentState.MTA , так как состояние подразделения уже задано. Если бы та же операция была предпринята с SetApartmentStateпомощью , InvalidOperationException был бы создан .

После запуска TrySetApartmentState потока метод используется снова. На этот раз возникает ThreadStateException исключение, так как поток уже запущен.

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

Комментарии

Этот метод вместе с методом SetApartmentState и методом TrySetApartmentState заменяет ApartmentState свойство .

Применяется к

Продукт Версии
.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