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

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


ApartmentState Перечисление

Определение

Задает апартаментное состояние потока Thread.

C#
public enum ApartmentState
C#
[System.Serializable]
public enum ApartmentState
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ApartmentState
Наследование
ApartmentState
Атрибуты

Поля

MTA 1

Объект Thread создаст многопоточный апартамент и войдет в него.

STA 0

Объект Thread создаст однопоточный апартамент и войдет в него.

Unknown 2

Свойство ApartmentState не установлено.

Примеры

В следующем примере кода показано, как задать состояние квартиры потока.

C#
using System;
using System.Threading;

class ApartmentTest
{
    static void Main()
    {
        Thread newThread = 
            new Thread(new ThreadStart(ThreadMethod));
        newThread.SetApartmentState(ApartmentState.MTA);

        Console.WriteLine("ThreadState: {0}, ApartmentState: {1}", 
            newThread.ThreadState, newThread.GetApartmentState());

        newThread.Start();

        // Wait for newThread to start and go to sleep.
        Thread.Sleep(300);
        try
        {
            // This causes an exception since newThread is sleeping.
            newThread.SetApartmentState(ApartmentState.STA);
        }
        catch(ThreadStateException stateException)
        {
            Console.WriteLine("\n{0} caught:\n" +
                "Thread is not in the Unstarted or Running state.", 
                stateException.GetType().Name);
            Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
                newThread.ThreadState, newThread.GetApartmentState());
        }
    }

    static void ThreadMethod()
    {
        Thread.Sleep(1000);
    }
}

Комментарии

Квартира — это логический контейнер в процессе для объектов, совместно использующие одни и те же требования к доступу к потокам. Все объекты в одной квартире могут принимать звонки из любого потока в квартире. Платформа .NET Framework не использует квартиры, а управляемые объекты отвечают за использование всех общих ресурсов потокобезопасным образом.

Так как классы COM используют квартиры, среда CLR должна создавать и инициализировать квартиру при вызове COM-объекта в ситуации COM-взаимодействия. Управляемый поток может создать и ввести однопоточное подразделение (STA), разрешающее только один поток или многопоточность (MTA), которая содержит один или несколько потоков. Вы можете управлять типом квартиры, созданной, задав ApartmentState свойству потока одно из значений ApartmentState перечисления. Так как данный поток может инициализировать com-квартиру только один раз, тип квартиры нельзя изменить после первого вызова неуправляемого кода.

Дополнительные сведения см. в разделе Thread, Managed and Unmanaged Threading, and Advanced COM Interoperability.

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

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 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
.NET Standard 2.0, 2.1

См. также раздел