STAThreadAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje, że model wątkowania COM dla aplikacji jest jednowątkowy apartament (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
- Atrybuty
Uwagi
Zastosuj ten atrybut do metody punktu wejścia ( Main()
metody w językach 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 Understanding and Using COM Threading Models (Omówienie modeli wątkowania modelu COM i korzystanie z tych modeli).
Modele wątkowania MODELU 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 apartament wielowątkowy. 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 międzyoperacyjna com nie jest używana, wątek nie jest inicjowany, a STAThreadAttribute atrybut, jeśli jest obecny, nie ma żadnego efektu.
Począwszy od programu .NET Framework w wersji 2.0, domyślny model wątkowania 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 apartamentów COM |
---|---|
C# | Apartament wielowątkowy |
C++ | Apartament wielowątkowy |
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 uruchomieniem wątku, aby ustawić model wątkowania 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 wymusić true
obsługę strony przez pulę wątków STA.
Poniżej przedstawiono niektóre przypadki, w których należy użyć atrybutu STAThreadAttribute , aby jawnie ustawić model wątków na jednowątkowy apartament:
Tworzysz aplikację Windows Forms. Aplikacje Windows Forms muszą być jednowątkowe, jeśli komunikują się ze składnikami systemu Windows, takimi jak Schowek lub typowe okna dialogowe systemu Windows, lub jeśli korzystają z funkcji systemowych, takich jak funkcje przeciągania i upuszczania. Szablon aplikacji Windows Forms dla języka C# automatycznie dodaje STAThreadAttribute atrybut do projektów C#. Ponieważ model apartamentów jednowątkowy jest domyślny dla języka Visual Basic, atrybut nie jest potrzebny.
Tworzysz aplikację w języku C#, która wywołuje bibliotekę Języka Visual Basic, która z kolei opiera się na współdziałaniu modelu COM. Ponieważ model apartamentów jednowątkowy jest domyślny dla języka Visual Basic, należy zmienić model wątkowy aplikacji na pojedynczy wątek przy użyciu atrybutu STAThreadAttribute .
Aplikacja wykonuje wywołania składników COM korzystających z modelu apartamentów 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() |
Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla 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) |