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