Partager via


CA2232 : Marquez les points d'entrée Windows Forms avec STAThread

TypeName

MarkWindowsFormsEntryPointsWithStaThread

CheckId

CA2232

Catégorie

Microsoft.Usage

Modification avec rupture

Modification sans rupture

Cause

Un assembly référence l'espace de noms System.Windows.Forms, et son point d'entrée n'est pas marqué avec l'attribut System.STAThreadAttribute.

Description de la règle

STAThreadAttribute indique que le modèle de thread COM pour l'application est un thread cloisonné (STA, Single-Threaded Apartment).Cet attribut doit être présent au point d'entrée de toute application qui utilise des Windows Forms ; s'il est omis, les composants Windows peuvent ne pas fonctionner correctement.Si l'attribut n'est pas présent, l'application utilise le modèle MTA (Multi-Threaded Apartment) qui n'est pas pris en charge pour les Windows Forms.

[!REMARQUE]

Les projets Visual Basic qui utilisent l'infrastructure d'application n'ont pas à marquer la méthode Main avec STAThread.Le compilateur Visual Basic le fait automatiquement.

Comment corriger les violations

Pour corriger une violation de cette règle, ajoutez l'attribut STAThreadAttribute au point d'entrée.Si l'attribut System.MTAThreadAttribute est présent, supprimez-le.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle si vous développez pour le .NET Compact Framework pour lequel l'attribut STAThreadAttribute n'est ni utile, ni pris en charge.

Exemple

Les exemples suivants présentent l'utilisation correcte 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);
        }
    }
}