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