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

Élément Valeur
ID de la règle CA2232
Category Microsoft.Usage
Modification avec rupture Sans rupture

Cause

Un assembly fait 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 de l’application est un modèle 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 d’appartement multithread, qui n’est pas pris en charge pour Windows Forms.

Notes

Les projets Visual Basic qui utilisent l’infrastructure d'application n’ont pas besoin de 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 sûr de supprimer un avertissement de cette règle si vous développez pour .NET Compact Framework, pour lequel l’attribut STAThreadAttribute est inutile et non pris en charge.

Exemple

Les exemples suivants illustrent l’utilisation correcte 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);
        }
    }
}