문제

에서 MSDN 문서에 STAThread:

는 것을 나타냅 COM threading 모델 응용 프로그램에 대한은 하나의 스레드 아파트(STA).

(참고로,그의 전체 기사.)

하나의 스레드 아파트...OK,는 내 머리 위로했다.또한,어디선가 읽지 않으면 응용 프로그램에서 사용하 COM 이 특성이 실제로는 아무 작업도 하지 않습니다.그래서 정확히 무엇을,어떻게 영향을 미치는 다중 스레드 응용 프로그램은 무엇입니까?해야 하는 다중 스레드 응용 프로그램(을 포함하는 아무것도에서 사용하는 사람 Timers 하는 비동기 방식 통화,단지 threadpools 과 같은)사용 MTAThread 는 경우에도,그것은'안전'?무엇 STAThread 및 MTAThread 실제적으로 하는가?

도움이 되었습니까?

해결책

아파트 스레딩은 COM 개념입니다. COM을 사용하지 않고 COM을 "커버 아래"로 사용하는 API를 사용하지 않는 경우 아파트에 대해 걱정할 필요가 없습니다.

아파트를 알고 있어야한다면 세부 사항은 얻을 수 있습니다. 조금 복잡합니다; 아마도 단순화 된 버전은 STA로 태그가 지정된 COM 객체가 stathread에서 실행되어야하며 MTA로 표시된 COM 개체는 MTA 스레드에서 실행되어야한다는 것입니다. Com은 이러한 규칙을 사용하여 이러한 다른 개체 간의 통화를 최적화하여 필요하지 않은 경우 마샬링을 피할 수 있습니다.

다른 팁

무엇을 하는지 그것을 보장 CoInitialize 이라고 지정 COINIT_APARTMENTTHREADED 으로 매개 변수입니다.사용하지 않는 경우에는 모든 COM 구성 요소 또는 ActiveX 컨트롤 그것은 아무런 효과가 없습니다.는 경우에 당신은 그것의 종류는 매우 중요합니다.

컨트롤트 스레드가 효과적으로 하나의 스레드를 호출을 그들에게서만 처리할 수 있습는 아파트에서 그들이 만들어졌습니다.

좀 더 세부 사항에서 MSDN:

개체들에서 하나의 스레드 아파트(STA)메소드를 호출 수신 에서만 자신의 아파트의 쓰레드로 동작하므로, 전화는 직렬화하고 도착하만 에 메시지 큐 경계(면 Win32 기능 PeekMessage 나 SendMessage 라고).

체에서 만들어 COM 스레드에서 멀티스레드 아파트(MTA)야 을 받을 수 있는 방법에서 전화 다른 스레드에서 어떤 시간입니다.당신 일반적으로 구현의 어떤 양식 동시성 제어에서 다중 스레드 체의 코드를 사용하여 Win32 동기화 기본 형식 등 중요한 섹션이 세마포,또는 뮤텍스를 보호하는 데 도움이는 객체의 데이터입니다.

할 때는 객체를 구성하는 에서 실행 중립적인 스레드 아파트 NTA()호출에 의해는 스레드에서 중 STA 또는 MTA,는 스레드 전송 NTA.면이 스레드 이후 호출 CoInitializeEx,the 호출에 실패 반환 RPC_E_CHANGED_MODE.

Stathread는 C# GUI 프로젝트의 주요 기능 전에 작성되었습니다. 그것은 아무것도하지 않지만 프로그램이 단일 스레드를 만들 수 있습니다.

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