CA2232: Marcar pontos de entrada do Windows Forms com STAThread

Item Valor
RuleId CA2232
Categoria Microsoft.Usage
Alteração da falha Sem interrupção

Causa

Um assembly faz referência ao namespace System.Windows.Forms, e seu ponto de entrada não está marcado com o atributo System.STAThreadAttribute.

Descrição da regra

STAThreadAttribute indica que o modelo de threading COM para o aplicativo é Single-Threaded Apartment. Esse atributo deve estar presente no ponto de entrada de qualquer aplicativo que use o Windows Forms; se ele for omitido, os componentes do Windows poderão não funcionar corretamente. Se o atributo não estiver presente, o aplicativo usará o modelo Multi-Threaded Apartment, que não tem suporte para o Windows Forms.

Observação

Os projetos do Visual Basic que usam o Application Framework não precisam marcar o método Main com STAThread. O compilador do Visual Basic faz isso automaticamente.

Como corrigir violações

Para corrigir uma violação dessa regra, adicione o atributo STAThreadAttribute ao ponto de entrada. Se o atributo System.MTAThreadAttribute estiver presente, remova-o.

Quando suprimir avisos

É seguro suprimir um aviso dessa regra caso você esteja desenvolvendo para o .NET Compact Framework, para o qual o atributo STAThreadAttribute é desnecessário e não tem suporte.

Exemplo

Os seguintes exemplos demonstram o uso correto de STAThreadAttribute:

using System; 
using  System.Windows.Forms;

namespace UsageLibrary
{
    public class MyForm: Form
    {
        public MyForm()
        {
            this.Text = "Hello World!";
        }
        
        // Satisfies rule: MarkWindowsFormsEntryPointsWithStaThread.
        [STAThread]
        public static void Main()
        {
            MyForm aform = new MyForm();
            Application.Run(aform);
        }
    }
}