Compartilhar via


CA2232: marcar pontos de entrada dos Windows Forms com STAThread

TypeName

MarkWindowsFormsEntryPointsWithStaThread

CheckId

CA2232

Categoria

Microsoft.Usage

Alteração Significativa

Sem Quebra

Causa

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

Descrição da Regra

STAThreadAttribute indica que o modelo de threading COM para o aplicativo é STA. de thread único.Esta deverá de atributo estiver presente no ponto de entrada de qualquer aplicativo que usa o Windows Forms; se for omitida, os componentes do windows podem não funcionar corretamente.Se o atributo não estiver presente, o aplicativo usa o modelo multi-threaded STA. do, que não tem suporte no Windows Forms.

ObservaçãoObservação

Visual Basic projetos que usa a estrutura de aplicativo não precisa marcar o método dePrincipal com STAThread.O compilador deVisual Basic faz automaticamente.

Como Corrigir Violações

Para corrigir uma violação desta regra, adicione o atributo de STAThreadAttribute ao ponto de entrada.Se o atributo de MTAThreadAttribute estiver presente, removê-lo.

Quando Suprimir Alertas

É seguro suprimir um aviso dessa regra se você está desenvolvendo para .NET Compact Framework, para que o atributo de STAThreadAttribute é desnecessário e não tiver suporte.

Exemplo

Os exemplos a seguir demonstram o uso correto de STAThreadAttribute.

Imports System
Imports System.Windows.Forms

NameSpace UsageLibrary

Public Class MyForm
   Inherits Form

   Public Sub New()
      Me.Text = "Hello World!" 
   End Sub 'New 

   ' Satisfies rule: MarkWindowsFormsEntryPointsWithStaThread.
   <STAThread()> _
   Public Shared Sub Main()
      Dim aform As New MyForm()
      Application.Run(aform)
   End Sub 

End Class 

End Namespace
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);
        }
    }
}