답변:
이것은 STAThreadAttribute
본질적으로 Windows 메시지 펌프가 COM 구성 요소와 통신하기위한 요구 사항입니다. 핵심 Windows Forms에서는 COM을 사용하지 않지만 시스템 대화 상자와 같은 OS의 많은 구성 요소가이 기술을 사용합니다.
MSDN 은 그 이유를 약간 더 자세히 설명합니다.
STAThreadAttribute는 응용 프로그램의 COM 스레드 모델이 단일 스레드 아파트임을 나타냅니다. 이 특성은 Windows Forms를 사용하는 모든 응용 프로그램의 진입 점에 있어야합니다. 생략하면 Windows 구성 요소가 올바르게 작동하지 않을 수 있습니다. 이 특성이 없으면 응용 프로그램은 Windows Forms에서 지원되지 않는 다중 스레드 아파트 모델을 사용합니다.
이 블로그 게시물 ( STAThread가 필요한 이유는 무엇입니까? )도 요구 사항에 대해 잘 설명합니다. 스레딩 모델이 CLR 수준에서 작동하는 방식에 대해보다 심도있게 보려면 2004 년 6 월 (2009 년 4 월)의 MSDN Magazine 기사를 참조하십시오 .
컴파일러에게 단일 스레드 아파트 모델에 있음을 알려줍니다. 이것은 악의적 인 COM 작업으로, 일반적으로 Windows Forms (GUI)에 사용되며, 도면으로 Win32를 사용하므로 STA로 구현됩니다. 여러 스레드에서 STA 모델 인 것을 사용하면 손상된 객체가 발생합니다.
그렇기 때문에 다른 스레드에서 Gui를 호출해야합니다 (양식 코딩을 한 경우).
기본적으로 걱정하지 마십시오. Windows GUI 스레드가 STA으로 표시되어야한다는 점만 받아들입니다. 그렇지 않으면 이상한 일이 발생합니다.
STAThreadAttribute는 COM이 필요한 경우 단일 스레드 COM 아파트를 사용하도록 스레드를 표시합니다. 기본적으로 .NET은 COM을 전혀 초기화하지 않습니다. COM 개체 또는 COM 컨트롤이 생성되거나 드래그 앤 드롭이 필요한 경우와 같이 COM이 필요한 경우에만 COM이 초기화됩니다. 이 경우 .NET은 기본 CoInitializeEx 함수를 호출합니다.이 함수는 스레드를 멀티 스레드 또는 단일 스레드 아파트에 조인할지 여부를 나타내는 플래그를 사용합니다.
자세한 정보는 여기 (2009 년 6 월)
과
[STAThread]
아십니까?