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