.NET 응용 프로그램의 스레드에서 만들고 실행중인 COM 개체가 있습니다. 스레드는 단일 스레드 아파트로 표시되며 모든 것이 작동하는 것 같습니다. 내 이해는 이러한 스레드가 주 스레드에서 COM 개체에 액세스하려고하면 해당 개체가 자동으로 마샬링되고 .NET에서 직렬화됩니다. 따라서이 경우에도 모든 것이 안전하고 깨끗하게 처리됩니다. 조금 천천히.이 경우 STA 메시지 루프가 필요합니까?
내 질문에, 일이 잘 작동하는 것처럼 보입니다 만, 이 아닙니다. 내가 만드는 STA 스레드에서 메시지 루프를 펌핑합니다. 가능한 경우 메시지 손실을 피할 수 있습니다 (그리고 가능한 효율 손실도 발생할 수 있습니다).
메시지 루프가 필요한 이유 (주로 도움이되는 Hans Passant에서)에 대한 많은 조언을 읽었으며 메시지 루프가 스레드 A에서 다른 스레드 B가 처리 할 수있는 위치를 제공한다는 점을 이해했습니다. 스레드 A에있는 COM 객체를 마샬링하여 재생할 수 있도록 요청하십시오. 그렇다면 다른 스레드가 스레드 A의 COM 개체에서 아무 것도 요청하지 않는 한 스레드 A는 메시지 루프를 펌핑하지 않아도 안전합니까? 아니면 메시지 루프가 재생 될 수있는 다른 경우가 있습니까?
여기에서 불을 탔나요? 그리고 당신이 화재로 놀고 있다면 당신이 묻는 경우가 있습니까?
이벤트가 있습니까? 재진입 호출로 인해 무한 재귀가 발생하지 않도록 이벤트 처리기를 제어 할 수 있습니까? 게시 메시지는 일반적으로 메시지 펌프가있는 경우이 루프를 끊는 데 사용됩니다. –
나는이 문제와 관련이 없다고 생각한다. 내가 만든 스레드에서 이벤트가 발생하고 아무도 다른 이벤트를보고 있지 않은 이유는 무엇입니까? 내가 사용하고있는 COM 객체는 무엇입니까? 내가 아는 한 그들은 이벤트를 발생시키지 않는다. – user12861
COM 개체의 디자인에 외부 세계에 무슨 일이 일어나는지 알려주는 경우 IConnectionPointContainer와 같은 나가는 이벤트 인터페이스를 구현한다. –