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-взаимодействие не используется, поток не инициализирован, а STAThreadAttribute атрибут, если он присутствует, не имеет эффекта.

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

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

Чтобы изменить эти значения по умолчанию, используйте STAThreadAttribute атрибут для задания модели потоков для приложения или вызова Thread.SetApartmentStateThread.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)

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

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