CA2232: Marcar puntos de entrada de Windows Forms con STAThread

Elemento Valor
RuleId CA2232
Category Microsoft.Usage
Cambio importante Poco problemático

Causa

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

Descripción de la regla

STAThreadAttribute indica que el modelo de subprocesos COM de la aplicación es contenedor uniproceso (STA). 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 usa el modelo de contenedor multiproceso, que no se admite para Windows Forms.

Nota:

Los proyectos de Visual Basic que usan Application Framework no tienen que marcar el método Main con STAThread. El compilador de 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 System.MTAThreadAttribute está presente, quítelo.

Cuándo suprimir las advertencias

Es seguro suprimir una advertencia de esta regla si su lenguaje de desarrollo es .NET Compact Framework, donde el atributo STAThreadAttribute no es necesario y no se admite.

Ejemplo

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