System.STAThreadAttribute 类

方法描述

指示应用程序的 COM 线程模型是单线程单元 (STA)。

语法定义(C# System.STAThreadAttribute 类 的用法)

[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Method)]
public sealed class STAThreadAttribute : Attribute

构造函数

构造函数名称 构造函数描述
STAThreadAttribute 初始化 STAThreadAttribute 类的新实例。

成员/方法

方法名称 方法描述
Equals 基础结构。返回一个值,该值指示此实例是否与指定的对象相等。 (继承自 Attribute。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetHashCode 返回此实例的哈希代码。 (继承自 Attribute。)
GetType 获取当前实例的 Type。 (继承自 Object。)
IsDefaultAttribute 当在派生类中重写时,指示此实例的值是否是派生类的默认值。 (继承自 Attribute。)
Match 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
ToString 返回表示当前对象的字符串。 (继承自 Object。)

提示和注释

将此特性应用于入口点方法(C# 和 Visual Basic 中的 Main() 方法)。 它对其他方法无效。 若要设置在代码中启动的线程的单元状态,请在启动线程前使用 Thread.SetApartmentState 方法。

注意

在 .NET Framework 1.0 版和 1.1 版中,在启动线程之前设置 Thread.ApartmentState 属性。

COM 线程模型只适用于使用 COM 互操作 的应用程序。 如果将此特性应用到不使用 COM 互操作 的应用程序,将没有任何效果。

COM 线程模型可设置为单线程单元或多线程单元。 如果应用程序线程实际调用了 COM 组件,则仅为 COM 互操作 初始化该线程。 如果没有使用 COM 互操作,则不初始化该线程。

在 .NET Framework 1.0 版和 1.1 版中,在 Main() 上使用此特性(而不是在第一行代码上设置 Thread.ApartmentState 属性),以确保在执行任何启动代码之前设置线程模型。

重要事项

在 .NET Framework 2.0 版中,如果在启动新线程之前尚未设置它们的单元状态,则这些新线程将初始化为 ApartmentState.MTA。 默认情况下,主应用程序线程被初始化为 ApartmentState.MTA。 您无法再通过在第一行代码上设置 Thread.ApartmentState 属性来将主应用程序线程设置为 ApartmentState.STA。 应改用 STAThreadAttribute。

在 .NET Framework 2.0 版中,还可以使用 /CLRTHREADATTRIBUTE(设置 CLR 线程特性) 链接器选项指定 C++ 应用程序的 COM 线程模型。

ASP.NET 应用程序应该将 @ Page 指令的 ASPCompat 特性设置为 true,以强制由 STA 线程池提供页面服务。

System.STAThreadAttribute 类例子


继承层次结构

System.Object

System.Attribute

System.STAThreadAttribute

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。