共用方式為


STAThreadAttribute 類別

定義

指示應用程式的 COM 執行緒模型為單一執行緒 Apartment (Single-Threaded Apartment,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() 進入點方法。 它不會影響其他方法。 若要設定您在程式代碼中啟動之線程的 Apartment 狀態,請在啟動線程之前使用 Thread.SetApartmentStateThread.TrySetApartmentState 方法。

注意

如需 COM 線程模型的概觀,請參閱 瞭解和使用 COM 線程模型

COM 線程模型僅適用於使用 COM Interop 的應用程式。 COM 線程模型可以設定為單個線程 Apartment 或多線程 Apartment。 只有在線程實際呼叫 COM 元件時,才會初始化 COM Interop 的應用程式線程。 如果未使用 COM Interop,則線程不會初始化,而且如果存在,則 STAThreadAttribute 屬性不會有任何作用。

從 .NET Framework 2.0 版開始,COM Interop 的默認線程模型取決於您開發應用程式的語言,如下表所示。

Language COM Apartment 模型
C# 多線程 Apartment
C++ 多線程 Apartment
Visual Basic 單個線程 Apartment

若要變更這些預設值,您可以使用 STAThreadAttribute 屬性來設定應用程式的線程模型,或在啟動線程之前呼叫 Thread.SetApartmentStateThread.TrySetApartmentState 方法,以針對特定線程設定線程模型。 在 C++ 中,您也可以使用 /CLRTHREADATTRIBUTE 連結器選項來指定 Apartment 模型。

ASP.NET 應用程式應該將 @ Page 指示詞的 屬性設定ASPCompat為 ,true以強制由 STA 線程集區服務頁面。

以下是您想要使用 STAThreadAttribute 屬性明確將線程模型設定為單個線程 Apartment 的一些案例:

  • 您正在開發 Windows Forms 應用程式。 如果 Windows Forms 應用程式與 Windows 系統元件通訊,例如剪貼簿或 Windows 通用對話框,或是使用拖放功能等系統功能,則必須使用單一線程。 適用於 C# 的 Windows Forms 應用程式範本會自動將 STAThreadAttribute 屬性新增至 C# 專案。 因為單一線程 Apartment 模型是 Visual Basic 的預設值,所以不需要 屬性。

  • 您正在開發可呼叫 Visual Basic 連結庫的 C# 應用程式,接著會依賴 COM Interop。 因為單一線程 Apartment 模型是 Visual Basic 的預設值,所以您應該使用 STAThreadAttribute 屬性,將應用程式的線程模型變更為單個線程。

  • 您的應用程式會呼叫使用單個線程 Apartment 模型的 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)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

(繼承來源 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

擷取物件的類型資訊,可以用來取得介面的類型資訊。

(繼承來源 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

擷取物件提供的類型資訊介面數目 (0 或 1)。

(繼承來源 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供物件所公開的屬性和方法的存取權。

(繼承來源 Attribute)

適用於

另請參閱