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 특성이 있으면 제거합니다.
경고를 표시하지 않는 경우
STAThreadAttribute 특성이 필요하지도 않고 지원되지도 않는 .NET Compact Framework용으로 개발할 경우에는 이 규칙에서 경고를 표시하지 않도록 설정해도 안전합니다.
예제
다음 예제에서는 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);
}
}
}