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
- Наследование
- Атрибуты
Комментарии
Примените этот атрибут к методу точки входа (метод в 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) |