STAThreadAttribute Classe

Definição

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
STAThreadAttribute
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)

Aplica-se a

Ver também