Windows Forms-Einstiegspunkte mit STAThread markieren

Aktualisiert: November 2007

     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.

Hinweis:

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.

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