문제

나는 C# 3.5를 배우고 있고 무엇을 알고 싶습니다 [STAThread] 우리 프로그램에서?

도움이 되었습니까?

해결책

그만큼 STAThreadAttribute 기본적으로 Windows 메시지 펌프가 COM 구성 요소와 통신하기위한 요구 사항입니다. Core Windows 양식은 COM을 사용하지 않지만 시스템 대화 상자와 같은 OS의 많은 구성 요소는이 기술을 사용합니다.

MSDN 그 이유를 약간 더 자세히 설명합니다.

stathreadattribute는 응용 프로그램의 COM 스레딩 모델이 단일 스레드 아파트임을 나타냅니다. 이 속성은 Windows 양식을 사용하는 응용 프로그램의 진입 점에 있어야합니다. 생략되면 Windows 구성 요소가 올바르게 작동하지 않을 수 있습니다. 속성이없는 경우 응용 프로그램은 Windows 양식에 지원되지 않는 멀티 스레드 아파트 모델을 사용합니다.

이 블로그 게시물 (Stathread가 필요한 이유는 무엇입니까?)는 또한 요구 사항을 아주 잘 설명합니다. Threading 모델이 CLR 수준에서 어떻게 작동하는지에 대한보다 심층적 인 견해를 원한다면 참조하십시오. 이 MSDN 잡지 기사 2004 년 6 월 (아카이브, 2009 년 4 월).

다른 팁

컴파일러에게 단일 스레드 아파트 모델에 있음을 알려줍니다. 이것은 악의적 인 것입니다. 일반적으로 STA로 구현되는 도면에 Win32를 사용하는 Windows Forms (GUI)에 사용됩니다. 여러 스레드에서 STA 모델 인 것을 사용하는 경우 손상된 객체가 나타납니다.

그렇기 때문에 다른 스레드에서 GUI로 호출 해야하는 이유입니다 (양식 코딩을 한 경우).

기본적으로 그것에 대해 걱정하지 마십시오. Windows GUI 스레드는 STA로 표시되어야한다는 것을 인정하십시오. 그렇지 않으면 이상한 일이 발생합니다.

stathreadattribute는 Com이 필요한 경우 단일 스레드 COM 아파트를 사용하는 스레드를 표시합니다. 기본적으로 .NET은 COM을 전혀 초기화하지 않습니다. COM 객체 또는 COM 컨트롤이 생성 될 때와 같이 COM이 필요한 경우에만 또는 DRAG 'N'드롭이 필요할 때 Com이 초기화됩니다. 이런 일이 발생하면 .NET은 기본 Coinitializeex 함수를 호출합니다.이 기능은 스레드를 멀티 스레드 또는 단일 스레드 아파트에 연결할지 여부를 나타내는 플래그를 취합니다.

자세한 정보를 읽으십시오 여기 (보관, 2009 년 6 월)

그리고

Stathread가 필요한 이유는 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top