2009-08-18 3 views

답변

32

이것은 WPF보다 Windows 요구 사항이며 .NET 이전의 Windows 폼 및 컨트롤의 원래 디자인으로 돌아갑니다.

STAThread는 현재 (메인) 스레드가 사용하는 스레딩 모델을 나타내는 "단일 스레드 아파트"를 나타냅니다. 사용중인 스레딩 모델은 다른 .NET 및 COM 응용 프로그램이 응용 프로그램 (및 본질적으로 해당 스레드)과 대화하는 방법을 나타냅니다. 단일 스레드 응용 프로그램 모델에서는 MTA 스레드 모델에 대해 한 번에 둘 이상의 STA 스레드에 "단일"개체가 "라이브"되지 않아야합니다. 객체와의 마샬링을 통해서만 아파트의 데이터에 포인터를 전달할 수 있습니다.

기본적으로 [STAThread] 선언을 사용하면 다른 응용 프로그램에서 데이터를 보낼 때 스레드의 정책을 알 수 있습니다. STA 모델은 Windows 스레드/응용 프로그램의 가장 일반적인 스레딩 모델입니다. STA 모델링 된 스레드에서 호출 된 경우 실행되지 않는 특정 코드가 STA 제한 사항을 준수하지 않는 방식으로 스레드 경계를 넘어 데이터를 보내고 받도록 설계되어 있기 때문에 가끔 발생합니다. 주어진 스레드의 아파트 모델이 런타임 동안 스레드 경계를 넘어 객체를 사용할 때 IDE가 불쾌한 액세스 위반 오류를 얻는 대신 컴파일 타임에 이러한 예외를 포착 할 수있게합니다.

당신은에서 MSDN 문서에서 STA와 MTA 스레드에 대해 읽을 수 있습니다 (WPF 전에서)도 정상 .NET 응용 프로그램이 주요의 꼭대기 [STAThread] 선언이 필요하다는 http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx

주().

4

여기에 대한 답은 blog entry입니다.

블로그에서 인용 다음 STAThreadAttribute 적용 경우

는, 현재 스레드의 아파트 상태를 변경하는 것은 단일 스레드 수있다. 에 대한 커다란 토론과 COM의 스레드와 쓰레드가 없으면이 속성은 현재 스레드와 사이의 통신 메커니즘을 COM을 통해 통신 할 수 있습니다. Windows Forms를 사용하는 경우 사용중인 기능에 따라 에 따라 일 수 있습니다. 구성 요소와 통신하려면 COM interop을 사용하십시오. 좋은 예는 클립 보드와 파일 대화 상자입니다.

Windows Forms는 MTA 또는 무료 스레드 아파트에서 지원되지 않습니다. 을 사용하는 응용 프로그램은 다른 구성 요소가 스레드의 아파트 상태를 부적절하게 초기화 할 수 있으므로 항상 사용중인 스타일을 선언해야합니다.

+0

초보자를위한 "지나치게 복잡하지 않은"경우라면 .. 그러지 마세요 ..나는 읽는 것을 좋아합니다 :) –

+2

참고 목적으로 여기에 요약을하는 것이 좋습니다. 블로그가 오프라인으로 바뀌면 게시물이 삭제되고 마이크로 소프트는 지옥 불의 공을 태우는 등의 일을합니다. –

관련 문제