Condividi tramite


CA2232: Contrassegnare i punti di ingresso del Windows Form con STAThread

TypeName

MarkWindowsFormsEntryPointsWithStaThread

CheckId

CA2232

Category

Microsoft.Usage

Breaking Change

Non sostanziale

Causa

Un assembly fa riferimento allo spazio dei nomi System.Windows.Forms e il relativo punto di ingresso non è contrassegnato con l'attributo System.STAThreadAttribute.

Descrizione della regola

STAThreadAttribute indica che il modello di threading COM per l'applicazione è apartment a thread singolo. Questo attributo deve essere presente sul punto di ingresso di qualsiasi applicazione che utilizza Windows Form; se omesso è possibile che il componente Windows non funzioni correttamente. Se l'attributo non è presente, l'applicazione utilizza il modello apartment multithreading, non supportato da Windows Form.

Nota

Per progetti Visual Basic che utilizzano il framework applicazione non è necessario contrassegnare il metodo Main con STAThread. Tale operazione viene effettuata automaticamente dal compilatore Visual Basic.

Come correggere le violazioni

Per correggere una violazione di questa regola, aggiungere l'attributo STAThreadAttribute al punto di ingresso. Se l'attributo System.MTAThreadAttribute è presente, rimuoverlo.

Esclusione di avvisi

L'esclusione di un avviso da questa regola è sicura in caso di sviluppo per .NET Compact Framework, per cui l'attributo STAThreadAttribute non è necessario e non è supportato.

Esempio

Negli esempi riportati di seguito viene illustrato l'utilizzo corretto di 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);
        }
    }
}