CA2232: Pontos de entrada da marca Windows Forms com STAThread

TypeName

MarkWindowsFormsEntryPointsWithStaThread

CheckId

CA2232

<strong>Categoria</strong>

Microsoft.Usage

Alteração significativa

Não separável

Causa

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

Descrição da regra

STAThreadAttributeindica que o COM o modelo para o aplicativo de threading STA. 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 de multithreaded apartment, o qual não há suporte para Windows Forms.

ObservaçãoObservação

Visual Basicprojetos que usam a estrutura do aplicativo não é necessário marcar a principal método com STAThread. O Visual Basic compilador faz automaticamente.

Como corrigir violações

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

Quando suprimir avisos

É seguro eliminar um aviso esta regra, se você estiver desenvolvendo para o.NET Compact Framework, para o qual o STAThreadAttribute atributo é desnecessário e não suportado.

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