CA2232: Windows Forms-Einstiegspunkte mit STAThread markieren
TypeName |
MarkWindowsFormsEntryPointsWithStaThread |
CheckId |
CA2232 |
Kategorie |
Microsoft.Usage |
Unterbrechende Änderung |
Nicht unterbrechend |
Ursache
Eine Assembly verweist auf den System.Windows.Forms-Namespace, und ihr Einstiegspunkt wird nicht mit dem System.STAThreadAttribute-Attribut markiert.
Regelbeschreibung
STAThreadAttribute gibt an, dass das COM-Threadingmodell für die Anwendung Singlethread-Apartment ist. Dieses Attribut muss am Einstiegspunkt jeder Anwendung vorhanden sein, die Windows Forms verwendet. Wird es weggelassen, funktionieren die Windows-Komponenten eventuell nicht richtig. Wenn das Attribut nicht vorhanden ist, verwendet die Anwendung das Multithreaded-Apartmentmodell, das von Windows Forms nicht unterstützt wird.
Tipp
Visual Basic-Projekte, die das Anwendungsframework verwenden, müssen die Main-Methode nicht mit STAThread markieren. Der Visual Basic-Compiler führt die Markierung automatisch aus.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, fügen Sie dem Einstiegspunkt das STAThreadAttribute-Attribut hinzu. Wenn das System.MTAThreadAttribute-Attribut vorhanden ist, entfernen Sie es.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn Sie eine Anwendung für .NET Compact Framework entwickeln. In diesem Fall ist das STAThreadAttribute-Attribut überflüssig und wird nicht unterstützt.
Beispiel
In den folgenden Beispielen wird die richtige Verwendung von STAThreadAttribute veranschaulicht.
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);
}
}
}