STAThreadAttribute Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica que o modelo de threading COM para uma aplicação é single-threaded apartment (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
- Herança
- Atributos
Observações
Aplique este atributo ao método do ponto de entrada (o método Main() em C# e Visual Basic). Não tem efeito noutros métodos. Para definir o estado de apartamento dos threads que começas no teu código, usa o Thread.SetApartmentState método ou Thread.TrySetApartmentState antes de iniciar o thread.
Note
Para uma visão geral dos modelos de threading COM, veja Compreender e Utilizar Modelos de Threading COM.
Os modelos de threading COM aplicam-se apenas a aplicações que utilizam interoperabilidade COM. O modelo de threading COM pode ser definido como apartamento single-threaded ou multithreaded. O thread de aplicação só é inicializado para interoperabilidade COM se o thread efetuar efetivamente uma chamada a um componente COM. Se a interoperabilidade COM não for utilizada, então a thread não é inicializada, e o STAThreadAttribute atributo, se estiver presente, não tem efeito.
A partir da versão 2.0 do .NET Framework, o modelo de threading padrão para interoperabilidade COM depende da linguagem em que está a desenvolver a sua aplicação, como mostra a tabela seguinte.
| Linguagem | Modelo de apartamento COM |
|---|---|
| C# | Apartamento multithread |
| C++ | Apartamento multithread |
| Visual Basic | Apartamento de uma só linha |
Para alterar estes predefinidos, usa o STAThreadAttribute atributo para definir o modelo de threading da aplicação, ou chama o Thread.SetApartmentState método or Thread.TrySetApartmentState antes de iniciar a thread para definir o modelo de threading para uma thread específica. Em C++, também pode usar a opção linker /CLRTHREAD para especificar o modelo do apartamento.
ASP.NET aplicações devem definir o atributo ASPCompat da diretiva @ Page como true para forçar a página a ser servida pelo pool de threads STA.
Aqui estão alguns dos casos em que vais querer usar o STAThreadAttribute atributo para definir explicitamente o modelo de threading como single-threaded apartment:
Estás a desenvolver uma aplicação Windows Forms. As aplicações do Windows Forms devem ser single-threaded se comunicarem com componentes do sistema Windows, como as caixas de diálogo comuns do Clipboard ou do Windows, ou se usarem funcionalidades do sistema como arrastar e largar. O modelo Windows Forms Application para C# adiciona automaticamente o atributo STAThreadAttribute aos projetos C#. Como o modelo de apartamento single-threaded é o padrão do Visual Basic, não há necessidade do atributo.
Estás a desenvolver uma aplicação C# que chama uma biblioteca Visual Basic, que, por sua vez, depende da interoperabilidade COM. Como o modelo de apartamento single-threaded é o padrão para Visual Basic, deves mudar o modelo de threading da tua app para single-threaded usando o atributo STAThreadAttribute.
A sua aplicação faz chamadas para componentes COM que utilizam o modelo de apartamento single-threaded.
Construtores
| Name | Description |
|---|---|
| STAThreadAttribute() |
Inicializa uma nova instância da STAThreadAttribute classe. |
Propriedades
| Name | Description |
|---|---|
| TypeId |
Quando implementado numa classe derivada, obtém um identificador único para esta Attribute. (Herdado de Attribute) |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| GetHashCode() |
Devolve o código de hash para esta instância. (Herdado de Attribute) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsDefaultAttribute() |
Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute) |
| Match(Object) |
Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
Implementações de Interface Explícita
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho. (Herdado de Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface. (Herdado de Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1). (Herdado de Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Proporciona acesso a propriedades e métodos expostos por um objeto. (Herdado de Attribute) |