CA2232: Oznacz punkty wpisu formularzy systemu Windows za pomocą STAThread
TypeName |
MarkWindowsFormsEntryPointsWithStaThread |
CheckId |
CA2232 |
Kategoria |
Microsoft.Usage |
Złamanie zmiany |
Bez podziału |
Przyczyna
Zestaw odwołuje się do System.Windows.Forms obszaru nazw i jego punkt wejścia nie jest oznaczony atrybutem STAThreadAttribute atrybut.
Opis reguły
STAThreadAttributeWskazuje, że COM, threading model dla aplikacji jest jednowątkowym apartamencie.Ten atrybut musi znajdować się w punkcie wejścia każdej aplikacji korzystającej z Windows Forms; Jeśli zostanie pominięty, składniki systemu Windows może nie działać poprawnie.Jeśli atrybut nie jest obecny, aplikacja wykorzystuje wielowątkowe komórkowy model, który nie jest obsługiwany dla Windows Forms.
[!UWAGA]
Visual Basicnie jest konieczne oznaczanie projektów korzystających z aplikacji głównego metody z STAThread.Visual Basic Kompilator nie robi tego automatycznie.
Jak naprawić naruszenia
Aby rozwiązać problem naruszenie tej zasady, dodać STAThreadAttribute atrybutu do punktu wejścia.Jeśli MTAThreadAttribute atrybut jest obecny, usuń go.
Kiedy do pomijania ostrzeżenia
Można bezpiecznie pomija ostrzeżenia, od tej reguły, w wypadku opracowywania.NET Compact Framework, dla którego STAThreadAttribute atrybut jest niepotrzebne i nie jest obsługiwana.
Przykład
W poniższych przykładach pokazano, poprawne użycie 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);
}
}
}