STAThreadAttribute Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt an, dass STA (Singlethreaded Apartment) als COM-Threadingmodell für eine Anwendung verwendet wird.
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
- Attribute
Hinweise
Wenden Sie dieses Attribut auf die Einstiegspunktmethode (die Main() Methode in C# und Visual Basic) an. Es hat keine Auswirkung auf andere Methoden. Um den Wohnungszustand von Threads festzulegen, die Sie im Code starten, verwenden Sie die Thread.SetApartmentState oder Thread.TrySetApartmentState Methode, bevor Sie den Thread starten.
Hinweis
Eine Übersicht über COM-Threadingmodelle finden Sie unter Grundlegendes und Verwenden von COM-Threadingmodellen.
COM-Threadingmodelle gelten nur für Anwendungen, die COM-Interop verwenden. Das COM-Threadingmodell kann auf singlethreaded apartment oder multithreaded apartment festgelegt werden. Der Anwendungsthread wird nur für COM-Interop initialisiert, wenn der Thread tatsächlich einen Aufruf an eine COM-Komponente macht. Wenn COM-Interop nicht verwendet wird, wird der Thread nicht initialisiert, und das STAThreadAttribute Attribut, falls vorhanden, hat keine Auswirkung.
Ab der .NET Framework Version 2.0 hängt das Standardthreadingmodell für COM-Interop von der Sprache ab, in der Sie Ihre Anwendung entwickeln, wie die folgende Tabelle zeigt.
| Sprache | COM-Wohnungsmodell |
|---|---|
| C# | Multithreaded Apartment |
| C++ | Multithreaded Apartment |
| Visual Basic | Einzelthread-Wohnung |
Um diese Standardeinstellungen zu ändern, verwenden Sie das STAThreadAttribute Attribut, um das Threadingmodell für die Anwendung festzulegen, oder rufen Thread.TrySetApartmentState Thread.SetApartmentState Sie die Oder-Methode auf, 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 Wohnungsmodell anzugeben.
ASP.NET Anwendungen sollten das ASPCompat Attribut der @Page-Richtlinie festlegen, um true die Seite zum Dienst durch den STA-Threadpool zu erzwingen.
Nachfolgend finden Sie einige der Fälle, in denen Sie das Attribut verwenden möchten, um das STAThreadAttribute Threadingmodell explizit auf singlethreaded 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-Funktionalität verwenden. Die Windows Forms Anwendungsvorlage für C# fügt das STAThreadAttribute Attribut automatisch zu C#-Projekten hinzu. Da das Einzelthread-Apartmentmodell die Standardeinstellung für Visual Basic ist, gibt es keine Notwendigkeit für das Attribut.
Sie entwickeln eine C#-App, die eine Visual Basic Bibliothek aufruft, die wiederum auf COM-Interop basiert. Da das Singlethreaded-Apartmentmodell die Standardeinstellung für Visual Basic ist, sollten Sie das Threadingmodell Ihrer App mithilfe des STAThreadAttribute Attributs auf einzelthreaded ändern.
Ihre Anwendung ruft COM-Komponenten auf, die das Einzelthread-Wohnungsmodell verwenden.
Konstruktoren
| STAThreadAttribute() |
Initialisiert eine neue Instanz der STAThreadAttribute-Klasse. |
Eigenschaften
| TypeId |
Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab. (Geerbt von Attribute) |
Methoden
| Equals(Object) |
Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist. (Geerbt von Attribute) |
| GetHashCode() |
Gibt den Hashcode für diese Instanz zurück. (Geerbt von Attribute) |
| GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
| IsDefaultAttribute() |
Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist. (Geerbt von Attribute) |
| Match(Object) |
Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht. (Geerbt von Attribute) |
| MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| _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 deren Hilfe 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) |
Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Geerbt von Attribute) |