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
属性

注解

将此属性应用于 C# 和 Visual Basic) 方法 (Main() 入口点方法。 它不会影响其他方法。 若要设置在代码中启动的线程的单元状态,请在启动线程之前使用 Thread.SetApartmentStateThread.TrySetApartmentState 方法。

注意

有关 COM 线程模型的概述,请参阅 了解和使用 COM 线程模型

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 应用程序应将 @ Page 指令的 属性设置为 ASPCompattrue以强制由 STA 线程池为页面提供服务。

下面是需要使用 特性将线程模型显式设置为单线程单元的一些情况 STAThreadAttribute

  • 你正在开发 Windows 窗体应用。 如果 Windows 窗体应用与 Windows 系统组件(如剪贴板或 Windows 通用对话框)通信,或者它们使用拖放功能等系统功能,则必须是单线程的。 适用于 C# 的 Windows 窗体应用程序模板会自动将 STAThreadAttribute 属性添加到 C# 项目。 由于单线程单元模型是 Visual Basic 的默认值,因此无需 属性。

  • 你正在开发一个调用 Visual Basic 库的 C# 应用,而该库又依赖于 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)

适用于

另请参阅