Поделиться через


CA2232: отметьте точки входа Windows Forms меткой STAThread

TypeName

MarkWindowsFormsEntryPointsWithStaThread

CheckId

CA2232

Категория

Microsoft.Usage

Критическое изменение

Не критическое

Причина

Сборка ссылается на пространство имен System.Windows.Forms, однако ее точка входа не помечена атрибутом System.STAThreadAttribute.

Описание правила

Атрибут STAThreadAttribute указывает, что потоковой моделью COM для приложения является однопотоковое подразделение. Данный атрибут должен находиться в точке входа любого приложения, использующего Windows Forms; если он отсутствует, компоненты Windows могут работать неправильно. Если этот атрибут не указан, приложение использует модель многопотокового подразделения, которая не поддерживается для Windows Forms.

Примечание

В проектах Visual Basic, использующих платформу приложений, метод Main не требуется помечать атрибутом STAThread.Компилятор Visual Basic делает это автоматически.

Устранение нарушений

Чтобы устранить нарушение данного правила, добавьте в точку входа атрибут STAThreadAttribute. Если в точке входа присутствует атрибут System.MTAThreadAttribute, удалите его.

Отключение предупреждений

Отключение предупреждений о нарушении данного правила безопасно в том случае, если приложение разрабатывается для платформы .NET Compact Framework, для которой атрибут STAThreadAttribute не требуется и не поддерживается.

Пример

В следующем примере демонстрируется правильное применение атрибута 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);
        }
    }
}