STAThreadAttribute Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Indica que o modelo de threading COM para um aplicativo é STA (Single-Threaded Apartment).
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
Comentários
Aplique esse atributo ao método de ponto de entrada (o Main()
método em C# e Visual Basic). Não tem efeito sobre outros métodos. Para definir o estado de apartment dos threads que você inicia em seu código, use o Thread.SetApartmentState método ou Thread.TrySetApartmentState antes de iniciar o thread.
Observação
Para obter uma visão geral dos modelos de threading COM, consulte Noções básicas e uso de modelos de threading COM.
Os modelos de threading COM só se aplicam a aplicativos que usam a interoperabilidade COM. O modelo de threading COM pode ser definido como apartment de thread único ou apartment multithreaded. 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 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 da linguagem na qual você está desenvolvendo seu aplicativo, como mostra a tabela a seguir.
Idioma | Modelo de apartamento COM |
---|---|
C# | Apartamento multithread |
C++ | Apartamento multithread |
Visual Basic | Apartment de 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 apartment.
ASP.NET aplicativos devem definir o ASPCompat
atributo da diretiva @ Page como para true
forçar a página a ser atendida pelo pool de threads STA.
Aqui estão alguns dos casos em que você desejará usar o STAThreadAttribute atributo para definir explicitamente o modelo de threading como apartment de thread único:
Você está desenvolvendo um aplicativo do Windows Forms. Os aplicativos do Windows Forms devem ser de thread único se se comunicarem com componentes do sistema Windows, como as caixas de diálogo comuns da Área de Transferência ou do Windows, ou se usarem recursos do sistema, como a funcionalidade de arrastar e soltar. O modelo de Aplicativo do Windows Forms para C# adiciona automaticamente o STAThreadAttribute atributo a projetos C#. Como o modelo de apartment de thread único é o padrão para o Visual Basic, não há necessidade do atributo.
Você está desenvolvendo um aplicativo C# que chama uma biblioteca do Visual Basic que, por sua vez, depende da interoperabilidade COM. Como o modelo de apartment de thread único é o padrão para o Visual Basic, você deve alterar o modelo de threading do aplicativo para single-threaded usando o STAThreadAttribute atributo .
Seu aplicativo faz chamadas para componentes COM que usam o modelo de apartment de thread único.
Construtores
STAThreadAttribute() |
Inicializa uma nova instância da classe STAThreadAttribute. |
Propriedades
TypeId |
Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute. (Herdado de Attribute) |
Métodos
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 para a 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 Object atual. (Herdado de Object) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Implantações explícitas de interface
_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 para um objeto, que pode ser usado para obter as informações de tipo para 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) |