Freigeben über


STAThreadAttribute Klasse

Definition

Gibt an, dass das COM-Threadingmodell für eine Anwendung Einthread-Apartment (STA) ist.

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
Vererbung
STAThreadAttribute
Attribute

Hinweise

Wenden Sie dieses Attribut auf die Einstiegspunktmethode an (die methode Main() in C# und Visual Basic). Sie hat keine Auswirkungen auf andere Methoden. Wenn Sie den Apartmentstatus von Threads festlegen möchten, die Sie im Code starten, verwenden Sie die Thread.SetApartmentState Oder-Methode Thread.TrySetApartmentState , bevor Sie den Thread starten.

COM-Threadingmodelle gelten nur für Anwendungen, die COM-Interoperabilität verwenden. Das COM-Threadingmodell kann auf singlethreaded apartment oder multithreaded apartment festgelegt werden. Der Anwendungsthread wird nur für COM-Interoperabilität initialisiert, wenn der Thread tatsächlich einen Aufruf einer COM-Komponente vorgibt. Wenn die COM-Interoperabilität nicht verwendet wird, wird der Thread nicht initialisiert, und das STAThreadAttribute Attribut hat, sofern vorhanden, keine Auswirkung.

Ab der .NET Framework Version 2.0 hängt das Standardthreadingmodell für COM-Interoperabilität von der Sprache ab, in der Sie Ihre Anwendung entwickeln, wie in der folgenden Tabelle dargestellt.

Sprache COM-Apartmentmodell
C# Multithread-Wohnung
C++ Multithread-Wohnung
Visual Basic Singlethread-Wohnung

Um diese Standardwerte zu ändern, verwenden Sie das STAThreadAttribute Attribut, um das Threadingmodell für die Anwendung festzulegen, oder rufen Sie die Thread.SetApartmentState Methode auf Thread.TrySetApartmentState , bevor Sie den Thread starten, um das Threadingmodell für einen bestimmten Thread festzulegen. In C++ können Sie auch die Option "/CLRTHREADATTRIBUTE "-Linker verwenden, um das Apartmentmodell anzugeben.

ASP.NET Anwendungen sollten das Attribut ASPCompat der Direktive @ Page auf true festlegen, damit die Seite vom STA-Threadpool gewartet wird.

Hier sind einige Der Fälle, in denen Sie das STAThreadAttribute Attribut verwenden möchten, um das Threadingmodell explizit auf Singlethread-Apartment festzulegen:

  • Sie entwickeln eine Windows Forms-App. Windows Forms Apps müssen singlethreaded sein, wenn sie mit Windows Systemkomponenten wie der Zwischenablage oder Windows gängigen Dialogfeldern kommunizieren oder Systemfeatures wie Drag-and-Drop-Funktionen verwenden. Die Windows Forms Anwendungsvorlage für C# fügt das attribut STAThreadAttribute automatisch zu C#-Projekten hinzu. Da das Singlethread-Apartmentmodell die Standardeinstellung für Visual Basic ist, ist das Attribut nicht erforderlich.

  • Sie entwickeln eine C#-App, die eine Visual Basic Bibliothek aufruft, die wiederum auf COM-Interoperabilität basiert. Da das Singlethread-Apartmentmodell die Standardeinstellung für Visual Basic ist, sollten Sie das Threadingmodell Ihrer App mithilfe des Attributs STAThreadAttribute in singlethreaded ändern.

  • Ihre Anwendung führt Aufrufe an COM-Komponenten durch, die das Singlethread-Apartmentmodell verwenden.

Konstruktoren

Name Beschreibung
STAThreadAttribute()

Initialisiert eine neue Instanz der STAThreadAttribute-Klasse.

Eigenschaften

Name Beschreibung
TypeId

Wenn sie in einer abgeleiteten Klasse implementiert wird, wird ein eindeutiger Bezeichner für diese Attribute.

(Geerbt von Attribute)

Methoden

Name Beschreibung
Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, gibt an, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

Name Beschreibung
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit denen die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Bietet Zugriff auf Eigenschaften und Methoden, die von einem Objekt verfügbar gemacht werden.

(Geerbt von Attribute)

Gilt für:

Weitere Informationen