Udostępnij za pośrednictwem


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