Contrassegnare i punti di ingresso di Windows Form con STAThread
Aggiornamento: novembre 2007
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. |
Correzione di 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);
}
}
}