Mark Windows Forms entry points with STAThread







Breaking Change



An assembly references the System.Windows.Forms namespace, and its entry point is not marked with the System.STAThreadAttribute attribute.

Rule Description

STAThreadAttribute indicates that the COM threading model for the application is single-threaded apartment. This attribute must be present on the entry point of any application that uses Windows Forms; if it is omitted, the Windows components might not work correctly. If the attribute is not present, the application uses the multithreaded apartment model, which is not supported for Windows Forms.

How to Fix Violations

To fix a violation of this rule, add the STAThreadAttribute attribute to the entry point. If the System.MTAThreadAttribute attribute is present, remove it.

When to Exclude Warnings

It is safe to exclude a warning from this rule if developing for the .NET Compact Framework, for which the STAThreadAttribute attribute is unnecessary and not supported.


The following examples demonstrate the correct usage of 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()
   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.
        public static void Main()
            MyForm aform = new MyForm();