STAThreadAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Indica che il modello di threading COM per un'applicazione è apartment a thread singolo (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
- Ereditarietà
- Attributi
Commenti
Applicare questo attributo al metodo del punto di ingresso (il metodo Main() in C# e Visual Basic). Non ha alcun effetto su altri metodi. Per impostare lo stato apartment dei thread avviati nel codice, usare il Thread.SetApartmentState metodo o Thread.TrySetApartmentState prima di avviare il thread.
I modelli di threading COM si applicano solo alle applicazioni che usano l'interoperabilità COM. Il modello di threading COM può essere impostato su apartment a thread singolo o apartment multithreading. Il thread applicazione viene inizializzato solo per l'interoperabilità COM se il thread esegue effettivamente una chiamata a un componente COM. Se l'interoperabilità COM non viene utilizzata, il thread non viene inizializzato e l'attributo STAThreadAttribute , se presente, non ha alcun effetto.
A partire da .NET Framework versione 2.0, il modello di threading predefinito per l'interoperabilità COM dipende dal linguaggio in cui si sta sviluppando l'applicazione, come illustrato nella tabella seguente.
| Lingua | Modello di apartment COM |
|---|---|
| C# | Appartamento multithreading |
| C++ | Appartamento multithreading |
| Visual Basic | Apartment a thread singolo |
Per modificare queste impostazioni predefinite, usare l'attributo STAThreadAttribute per impostare il modello di threading per l'applicazione oppure chiamare il Thread.SetApartmentState metodo o Thread.TrySetApartmentState prima di avviare il thread per impostare il modello di threading per un thread specifico. In C++, è anche possibile usare l'opzione del linker /CLRTHREADATTRIBUTE per specificare il modello apartment.
ASP.NET le applicazioni devono impostare l'attributo
Ecco alcuni dei casi in cui si vuole usare l'attributo STAThreadAttribute per impostare in modo esplicito il modello di threading su apartment a thread singolo:
Si sta sviluppando un'app Windows Forms. Windows Forms le app devono essere a thread singolo se comunicano con componenti di sistema Windows come gli Appunti o Windows finestre di dialogo comuni o se usano funzionalità di sistema come la funzionalità di trascinamento della selezione. Il modello applicazione Windows Forms per C# aggiunge automaticamente l'attributo STAThreadAttribute ai progetti C#. Poiché il modello apartment a thread singolo è l'impostazione predefinita per Visual Basic, non è necessario l'attributo .
Si sta sviluppando un'app C# che chiama una libreria di Visual Basic, che a sua volta si basa sull'interoperabilità COM. Poiché il modello apartment a thread singolo è l'impostazione predefinita per Visual Basic, è consigliabile modificare il modello di threading dell'app in a thread singolo usando l'attributo STAThreadAttribute.
L'applicazione effettua chiamate ai componenti COM che usano il modello apartment a thread singolo.
Costruttori
| Nome | Descrizione |
|---|---|
| STAThreadAttribute() |
Inizializza una nuova istanza della classe STAThreadAttribute. |
Proprietà
| Nome | Descrizione |
|---|---|
| TypeId |
Se implementato in una classe derivata, ottiene un identificatore univoco per questo Attribute. (Ereditato da Attribute) |
Metodi
| Nome | Descrizione |
|---|---|
| Equals(Object) |
Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato. (Ereditato da Attribute) |
| GetHashCode() |
Restituisce il codice hash per questa istanza. (Ereditato da Attribute) |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| IsDefaultAttribute() |
Quando sottoposto a override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata. (Ereditato da Attribute) |
| Match(Object) |
Quando sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza è uguale a un oggetto specificato. (Ereditato da Attribute) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch. (Ereditato da Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera le informazioni sul tipo per un oggetto, che può essere utilizzato per ottenere le informazioni sul tipo per un'interfaccia. (Ereditato da Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1). (Ereditato da Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Fornisce l'accesso alle proprietà e ai metodi esposti da un oggetto . (Ereditato da Attribute) |