Compartilhar via


Pontos de entrada marca Windows Forms com STAThread

TypeName

MarkWindowsFormsEntryPointsWithStaThread

CheckId

CA2232

Category (Categoria)

Microsoft.uso

Quebrando alterar

Não separável

Causa

O faz referência a um assemblySystem.Windows.Forms espaço para nome e seu ponto de entrada não está marcado com o System.STAThreadAttribute atributo.

Descrição da regra

STAThreadAttribute indica que o COM o modelo para o aplicativo de threading single-threaded apartment. Este atributo deve estar presente no ponto de entrada de qualquer aplicativo que usa o Windows Forms; se for omitido, os componentes do Windows podem não funcionar corretamente.Se o atributo não estiver presente, o aplicativo usa o modelo multithreaded apartment, o qual não há suporte para Windows Forms.

Observação:

Visual Basic projetos que usam a estrutura de aplicativos não são necessário marcar a Principal método com STAThread.The Visual Basic compilador faz isso automaticamente.

Como corrigir violações

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

Quando suprimir avisos

É seguro eliminar um aviso essa regra se você estiver desenvolvendo para o .NET Compact estrutura, para o qual o STAThreadAttribute o atributo é desnecessário e não há 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);
        }
    }
}