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