STAThreadAttribute Klasa

Definicja

Wskazuje, że model wątków COM dla aplikacji jest jednowątkowy (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
Dziedziczenie
STAThreadAttribute
Atrybuty

Uwagi

Zastosuj ten atrybut do metody punktu wejścia (Main()metoda w języku C# i Visual Basic). Nie ma wpływu na inne metody. Aby ustawić stan mieszkania wątków uruchamianych w kodzie, użyj Thread.SetApartmentState metody or Thread.TrySetApartmentState przed rozpoczęciem wątku.

Uwaga

Aby zapoznać się z omówieniem modeli wątków MODELU COM, zobacz Omówienie modeli wątków modelu COM i używanie ich.

Modele wątków COM mają zastosowanie tylko do aplikacji korzystających z międzyoperacyjnego modelu COM. Model wątkowania COM można ustawić na jednowątkowy apartament lub wielowątkowy apartament. Wątek aplikacji jest inicjowany tylko dla międzyoperacyjnego modelu COM, jeśli wątek rzeczywiście wykonuje wywołanie składnika COM. Jeśli interop MODELU COM nie jest używany, wątek nie jest inicjowany, a STAThreadAttribute atrybut, jeśli jest obecny, nie ma wpływu.

Począwszy od .NET Framework w wersji 2.0, domyślny model wątków dla międzyoperacyjności MODELU COM zależy od języka, w którym tworzysz aplikację, jak pokazano w poniższej tabeli.

Język Model mieszkania COM
C# Wielowątkowy apartament
C++ Wielowątkowy apartament
Visual Basic Jednowątkowy apartament

Aby zmienić te wartości domyślne, należy użyć atrybutu STAThreadAttribute , aby ustawić model wątków dla aplikacji lub wywołać Thread.SetApartmentState metodę lub Thread.TrySetApartmentState przed rozpoczęciem wątku, aby ustawić model wątków dla określonego wątku. W języku C++można również użyć opcji konsolidatora /CLRTHREADATTRIBUTE w celu określenia modelu mieszkania.

ASP.NET aplikacje powinny ustawić ASPCompat atrybut dyrektywy @ Page, aby true wymusić obsługę strony przez pulę wątków STA.

Poniżej przedstawiono niektóre przypadki, w których chcesz użyć atrybutu STAThreadAttribute , aby jawnie ustawić model wątków na jednowątkowy:

  • Tworzysz aplikację Windows Forms. Windows Forms aplikacje muszą być jednowątkowane, jeśli komunikują się z Windows składnikami systemu, takimi jak Schowek lub Windows typowych okien dialogowych, lub jeśli używają funkcji systemowych, takich jak funkcje przeciągania i upuszczania. Szablon aplikacji Windows Forms dla języka C# automatycznie dodaje STAThreadAttribute atrybut do projektów języka C#. Ponieważ model mieszkania jednowątkowego jest domyślny dla Visual Basic, nie ma potrzeby atrybutu.

  • Tworzysz aplikację w języku C#, która wywołuje bibliotekę Visual Basic, która z kolei opiera się na międzyoperacyjności MODELU COM. Ponieważ model mieszkania jednowątkowego jest domyślny dla Visual Basic, należy zmienić model wątkowania aplikacji na jednowątkowy przy użyciu atrybutu STAThreadAttribute .

  • Aplikacja wykonuje wywołania składników COM korzystających z modelu mieszkania jednowątkowego.

Konstruktory

STAThreadAttribute()

Inicjuje nowe wystąpienie klasy STAThreadAttribute.

Właściwości

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsDefaultAttribute()

W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też