STAThreadAttribute Klasa

Definicja

Wskazuje, że model wątkowości COM dla aplikacji jest apartamentem jednowątkowym (STA).Indicates that the COM threading model for an application is single-threaded apartment (STA).

public ref class STAThreadAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class STAThreadAttribute : Attribute
type STAThreadAttribute = class
    inherit Attribute
Public NotInheritable Class STAThreadAttribute
Inherits Attribute
Dziedziczenie
STAThreadAttribute
Atrybuty

Uwagi

Zastosuj ten atrybut do metody punktu wejścia (Metoda Main() w C# i Visual Basic).Apply this attribute to the entry point method (the Main() method in C# and Visual Basic). Nie ma ona wpływu na inne metody.It has no effect on other methods. Aby ustawić stan apartamentu wątków, które zaczynają się w kodzie, użyj metody Thread.SetApartmentState lub Thread.TrySetApartmentState przed uruchomieniem wątku.To set the apartment state of threads you start in your code, use the Thread.SetApartmentState or Thread.TrySetApartmentState method before starting the thread.

Uwaga

Aby zapoznać się z omówieniem modeli wątkowości COM, zobacz Opis i używanie modeli wątkowości com.For an overview of COM threading models, see Understanding and Using COM Threading Models.

Modele wątkowości COM stosują się tylko do aplikacji, które korzystają z międzyoperacyjności modelu COM.COM threading models only apply to applications that use COM interop. Model wątkowości COM może być ustawiony na Apartament jednowątkowy lub Apartament wielowątkowy.The COM threading model can be set to single-threaded apartment or multithreaded apartment. Wątek aplikacji jest inicjowany tylko dla współdziałania z modelem COM, jeśli wątek rzeczywiście wywołuje składnik COM.The application thread is only initialized for COM interop if the thread actually makes a call to a COM component. Jeśli nie jest używana usługa międzyoperacyjna modelu COM, wątek nie zostanie zainicjowany i atrybut STAThreadAttribute, jeśli jest obecny, nie ma żadnego wpływu.If COM interop is not used, then the thread is not initialized, and the STAThreadAttribute attribute, if it is present, has no effect.

Począwszy od .NET Framework w wersji 2,0, domyślny model wątkowości dla międzyoperacyjności modelu COM zależy od języka, w którym tworzysz aplikację, jak pokazano w poniższej tabeli.Starting with the .NET Framework version 2.0, the default threading model for COM interop depends on the language in which you are developing your application, as the following table shows.

JęzykLanguage Model Apartment COMCOM apartment model
Język C#C# Apartament wielowątkowyMultithreaded apartment
C++C++ Apartament wielowątkowyMultithreaded apartment
Język Visual BasicVisual Basic Apartament jednowątkowySingle-threaded apartment

Aby zmienić te ustawienia domyślne, Użyj atrybutu STAThreadAttribute, aby ustawić model wątkowości dla aplikacji, lub wywołaj metodę Thread.SetApartmentState lub Thread.TrySetApartmentState przed rozpoczęciem wątku, aby ustawić model wątkowości dla określonego wątku.To change these defaults, you use the STAThreadAttribute attribute to set the threading model for the application, or call the Thread.SetApartmentState or Thread.TrySetApartmentState method before starting the thread to set the threading model for a particular thread. W C++programie można również użyć opcji konsolidatora /CLRTHREADATTRIBUTE , aby określić model apartamentu.In C++, you can also use the /CLRTHREADATTRIBUTE linker option to specify the apartment model.

Aplikacje ASP.NET powinny ustawić atrybut ASPCompat dyrektywy @ Page na true, aby wymusić obsługę strony przez pulę wątków sta.ASP.NET applications should set the ASPCompat attribute of the @ Page directive to true to force the page to be serviced by the STA thread pool.

Poniżej przedstawiono niektóre przypadki, w których należy użyć atrybutu STAThreadAttribute, aby jawnie ustawić model wątkowości na Apartament jednowątkowy:Here are some of the cases in which you'll want to use the STAThreadAttribute attribute to explicitly set the threading model to single-threaded apartment:

  • Tworzysz aplikację Windows Formsową.You're developing a Windows Forms app. Aplikacje Windows Forms muszą być jednowątkowe, jeśli komunikują się ze składnikami systemu Windows, takimi jak schowek lub wspólne okna dialogowe systemu Windows lub korzystają z funkcji systemu, takich jak funkcja przeciągania i upuszczania.Windows Forms apps must be single-threaded if they communicate with Windows system components such as the Clipboard or Windows common dialog boxes, or if they use system features such as drag-and-drop functionality. Szablon aplikacji Windows Forms C# automatycznie dodaje atrybut STAThreadAttribute do C# projektów.The Windows Forms Application template for C# automatically adds the STAThreadAttribute attribute to C# projects. Ponieważ model apartamentu jednowątkowego jest wartością domyślną Visual Basic, nie ma potrzeby dla atrybutu.Because the single-threaded apartment model is the default for Visual Basic, there is no need for the attribute.

  • Tworzysz C# aplikację, która wywołuje bibliotekę Visual Basic, która z kolei korzysta z międzyoperacyjności modelu com.You're developing a C# app that calls a Visual Basic library, which, in turn, relies on COM interop. Ponieważ model apartamentu jednowątkowego jest wartością domyślną dla Visual Basic, należy zmienić model wątkowości aplikacji na jednowątkowy przy użyciu atrybutu STAThreadAttribute.Because the single-threaded apartment model is the default for Visual Basic, you should change your app's threading model to single-threaded by using the STAThreadAttribute attribute.

  • Aplikacja wykonuje wywołania do składników COM, które używają modelu Apartment jednowątkowego.Your application makes calls to COM components that use the single-threaded apartment model.

Konstruktory

STAThreadAttribute()

Inicjuje nowe wystąpienie klasy STAThreadAttribute klasy.Initializes a new instance of the STAThreadAttribute class.

Właściwości

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.Returns a value that indicates whether this instance is equal to a specified object.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca kod skrótu dla tego wystąpienia.Returns the hash code for this instance.

(Odziedziczone po Attribute)
GetType()

Pobiera Type bieżącego wystąpienia.Gets the Type of the current instance.

(Odziedziczone po Object)
IsDefaultAttribute()

Gdy jest zastępowany w klasie pochodnej, wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Odziedziczone po Attribute)
Match(Object)

Gdy jest zastępowany w klasie pochodnej, zwraca wartość wskazującą, czy to wystąpienie jest zgodne z określonym obiektem.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy skróconą kopię bieżącego Object.Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg, który reprezentuje bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.Maps a set of names to a corresponding set of dispatch identifiers.

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

Pobiera informacje o typie dla obiektu, którego można użyć do uzyskania informacji o typie dla interfejsu.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).Retrieves the number of type information interfaces that an object provides (either 0 or 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.Provides access to properties and methods exposed by an object.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też