STAThreadAttribute Класс

Определение

Указывает, что потоковой моделью COM для приложения является однопотоковое подразделение (STA).

public ref class STAThreadAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class STAThreadAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class STAThreadAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type STAThreadAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type STAThreadAttribute = class
    inherit Attribute
Public NotInheritable Class STAThreadAttribute
Inherits Attribute
Наследование
STAThreadAttribute
Атрибуты

Комментарии

Примените этот атрибут к методу точки входа (Main()метод в C# и Visual Basic). Это не влияет на другие методы. Чтобы задать состояние квартиры потоков, которые вы начинаете в коде, используйте Thread.SetApartmentState метод или Thread.TrySetApartmentState метод перед запуском потока.

Примечание

Общие сведения о моделях потоков COM см. в статье "Основные сведения о моделях потоков COM и их использовании".

Модели потоков COM применяются только к приложениям, используюющим COM-взаимодействие. Модель потоков COM может быть задана как однопоточная квартира или многопоточная квартира. Поток приложения инициализируется только для COM-взаимодействия, если поток фактически вызывает com-компонент. Если COM-взаимодействие не используется, поток не инициализирован, а STAThreadAttribute атрибут, если он присутствует, не оказывает влияния.

Начиная с платформа .NET Framework версии 2.0 модель потоков по умолчанию для COM-взаимодействия зависит от языка, на котором разрабатывается приложение, как показано в следующей таблице.

Язык Модель квартиры COM
C# Многопоточность квартиры
C++ Многопоточность квартиры
Visual Basic Однопотоковая квартира

Чтобы изменить эти значения по умолчанию, используйте STAThreadAttribute атрибут, чтобы задать модель потоков для приложения, или вызвать Thread.SetApartmentState метод или Thread.TrySetApartmentState метод перед запуском потока, чтобы задать модель потоков для определенного потока. В C++можно также использовать параметр компоновщика /CLRTHREADATTRIBUTE для указания модели квартиры.

ASP.NET приложениям следует задать ASPCompat атрибут директивы @Page, чтобы true принудительно обслуживать страницу пулом потоков STA.

Ниже приведены некоторые случаи, в которых вы хотите использовать STAThreadAttribute атрибут для явного задания модели потоковой модели на однопотоковую квартиру:

  • Вы разрабатываете приложение Windows Forms. Windows Forms приложения должны быть однопоточными, если они взаимодействуют с Windows системными компонентами, такими как буфер обмена или Windows распространенных диалоговых окон, или если они используют системные функции, такие как функции перетаскивания. Шаблон приложения Windows Forms для C# автоматически добавляет атрибут в STAThreadAttribute проекты C#. Так как модель однопотоковой квартиры используется по умолчанию для Visual Basic, атрибут не требуется.

  • Вы разрабатываете приложение C#, которое вызывает библиотеку Visual Basic, которая, в свою очередь, использует COM-взаимодействие. Так как модель однопотоковых квартир по умолчанию для Visual Basic, следует изменить модель потоков приложения на однопотоковую с помощью атрибутаSTAThreadAttribute.

  • Приложение выполняет вызовы com-компонентов, использующих модель однопотоковых квартир.

Конструкторы

STAThreadAttribute()

Инициализирует новый экземпляр класса STAThreadAttribute.

Свойства

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от Attribute)

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

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