2013-07-17 2 views
1

이 항목에 대한 대부분의 스레드를 읽은 후에도 여전히 혼란 스럽습니다.COM 아파트 STA 사용

.Net의 다중 스레드에서 COM STA DLL의 인스턴스를 사용하는 경우 COM 기술이 대기열을 사용하여 호출을 직렬화하지 않을까요?

instance.doWork(); 

true의 경우,이 괜찮을, 유일한 처벌이 느린 것이다 것을하고

var instance = new 3PartyComStaLib() 

다중 스레드?

+0

용어가 혼란스럽고 실제로 스 니펫에 호출이 표시되지 않지만 대략적인 대답은 "예"입니다. 이것은 많은 질문이 아닙니다. 정말로 알고 싶었던 것입니까? –

+0

추가 된 코드 – Stig

답변

3

STA 개체에 대한 COM 호출은 사용자가 끝날 때의 규칙을 위반하지 않는다면 직렬화 될 예정입니다. 특히 코드가 아파트 경계를 넘는 원시 COM 포인터를 전달하지 않도록해야합니다.

COM 포인터를 다른 스레드와 아파트에 전달해야 할 때 포인터를 마샬링하고 (예 : CoMarshalInterThreadInterfaceInStream API를 멋지게 사용) 대상 스트림을 비 정렬 화하여 COM에 프록시를 만들 수있는 기회를 주어야합니다/스텁 쌍 및 문제의 직렬화를 설정합니다.