Compartilhar via


STAThreadAttribute Classe

Definição

Indica que o modelo de threading COM para um aplicativo é STA (apartamento de thread único).

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

Comentários

Aplique esse atributo ao método de ponto de entrada (o método Main() em C# e Visual Basic). Ele não tem efeito sobre outros métodos. Para definir o estado do apartamento de threads que você inicia em seu código, use o método ou Thread.TrySetApartmentState o Thread.SetApartmentState método antes de iniciar o thread.

Os modelos de threading COM se aplicam somente a aplicativos que usam a interoperabilidade COM. O modelo de threading COM pode ser definido como apartamento com thread único ou apartamento multithread. O thread do aplicativo só será inicializado para interoperabilidade COM se o thread realmente fizer uma chamada para um componente COM. Se a interoperabilidade COM não for usada, o thread não será inicializado e o STAThreadAttribute atributo, se ele estiver presente, não terá efeito.

A partir do .NET Framework versão 2.0, o modelo de threading padrão para interoperabilidade COM depende do idioma no qual você está desenvolvendo seu aplicativo, como mostra a tabela a seguir.

Linguagem Modelo de apartamento COM
C# Apartamento multithreaded
C++ Apartamento multithreaded
Visual Basic Apartamento com thread único

Para alterar esses padrões, use o STAThreadAttribute atributo para definir o modelo de threading para o aplicativo ou chame o Thread.SetApartmentState método ou Thread.TrySetApartmentState antes de iniciar o thread para definir o modelo de threading para um thread específico. No C++, você também pode usar a opção de vinculador /CLRTHREADATTRIBUTE para especificar o modelo de apartamento.

ASP.NET aplicativos devem definir o atributo ASPCompat da diretiva @ Page para true para forçar a página a ser atendida pelo pool de threads do STA.

Aqui estão alguns dos casos em que você desejará usar o STAThreadAttribute atributo para definir explicitamente o modelo de threading como um apartamento de thread único:

  • Você está desenvolvendo um aplicativo Windows Forms. Windows Forms aplicativos devem ser de thread único se se comunicarem com Windows componentes do sistema, como a Área de Transferência ou Windows caixas de diálogo comuns, ou se usarem recursos do sistema, como funcionalidade de arrastar e soltar. O modelo de aplicativo Windows Forms para C# adiciona automaticamente o atributo STAThreadAttribute a projetos C#. Como o modelo de apartamento com thread único é o padrão para Visual Basic, não há necessidade do atributo.

  • Você está desenvolvendo um aplicativo C# que chama uma biblioteca de Visual Basic, que, por sua vez, depende da interoperabilidade COM. Como o modelo de apartamento de thread único é o padrão para Visual Basic, você deve alterar o modelo de threading do aplicativo para thread único usando o atributo STAThreadAttribute.

  • Seu aplicativo faz chamadas para componentes COM que usam o modelo de apartamento de thread único.

Construtores

Nome Description
STAThreadAttribute()

Inicializa uma nova instância da classe STAThreadAttribute.

Propriedades

Nome Description
TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse Attribute.

(Herdado de Attribute)

Métodos

Nome Description
Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash dessa instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo de um objeto, que podem ser usadas para obter as informações de tipo de uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)

Aplica-se a

Confira também