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 (metoda Main() 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.
Modele wątkowe 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 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 COM nie jest używany, wątek nie jest inicjowany, a STAThreadAttribute atrybut, jeśli jest obecny, nie ma wpływu.
Począwszy od platformy .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ątków dla określonego wątku. W języku C++można również użyć opcji konsolidatora /CLRTHREADATTRIBUTE , aby określić model mieszkania.
ASP.NET aplikacje powinny ustawić atrybut ASPCompat dyrektywy @ Page na true, aby wymusić 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. Windows Forms aplikacje muszą być jednowątkowy, 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 atrybut STAThreadAttribute do projektów języka C#. Ponieważ model apartamentów jednowątkowy 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 apartamentów jednowątkowy jest domyślny dla Visual Basic, należy zmienić model wątków 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ątkowych.
Konstruktory
| Nazwa | Opis |
|---|---|
| STAThreadAttribute() |
Inicjuje nowe wystąpienie klasy STAThreadAttribute. |
Właściwości
| Nazwa | Opis |
|---|---|
| TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attribute. (Odziedziczone po Attribute) |
Metody
| Nazwa | Opis |
|---|---|
| Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
| GetHashCode() |
Zwraca kod skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| IsDefaultAttribute() |
Po zastąpieniu w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej. (Odziedziczone po Attribute) |
| Match(Object) |
Po zastąpieniu 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 Object. (Odziedziczone po Object) |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
| Nazwa | Opis |
|---|---|
| _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 obiektu, którego można użyć do uzyskania 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) |
Zapewnia dostęp do właściwości i metod uwidocznionych przez obiekt. (Odziedziczone po Attribute) |