Compartir a través de


CA2232: Marcar puntos de entrada de Windows Forms con STAThread

TypeName

MarkWindowsFormsEntryPointsWithStaThread

Identificador de comprobación

CA2232

Categoría

Microsoft.Usage

Cambio problemático

No

Motivo

Un ensamblado hace referencia al espacio de nombres System.Windows.Forms y su punto de entrada no está marcado con el atributo STAThreadAttribute.

Descripción de la regla

STAThreadAttribute indica que el modelo de subprocesos de COM para la aplicación es un contenedor uniproceso.Este atributo debe estar presente en el punto de entrada de cualquier aplicación que utilice Formularios Windows Forms; si se omite, los componentes de Windows podrían no funcionar correctamente.Si el atributo no está presente, la aplicación utiliza el modelo de apartamento multiproceso, que no es compatible con Formularios Windows Forms.

[!NOTA]

Los proyectos de Visual Basic que utilizan el marco de trabajo de la aplicación no tienen que marcar el método Main con STAThread.El compilador Visual Basic lo hace automáticamente.

Cómo corregir infracciones

Para corregir una infracción de esta regla, agregue el atributo STAThreadAttribute al punto de entrada.Si el atributo MTAThreadAttribute está presente, quítelo.

Cuándo suprimir advertencias

Es seguro suprimir una advertencia de esta regla si está desarrollando para .NET Compact Framework, para el que el atributo STAThreadAttribute no es necesario y ni compatible.

Ejemplo

Los ejemplos siguientes muestran el uso correcto 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);
        }
    }
}