2013-05-26 3 views
1

PInvoke를 사용하여 관리되지 않는 C++ DLL 함수를 호출하는 C# WPF 응용 프로그램에서 작업하고 있습니다. WPF 응용 프로그램은 Blend를 사용하여 만들어졌습니다.WPF 동시성 모델

비 관리 C++ DLL은 PInvoke 함수에서 CoInitializeEx(NULL, COINIT_MULTITHREADED)을 호출합니다. 이 코드 줄에 오류 메시지가 표시됩니다. "COM library already initialized with incompatible concurrency model"

WPF가 본질적으로 STAThread라고 가정합니다. 내가 맞습니까?

어떻게하면 위 오류를 해결할 수 있습니까?

답변

0

예 WPF UI 스레드는 COM 아파트 상태를 단일 스레드로 초기화합니다. 그것은 하나의 단일 스레드 아파트가 아니라면 물건의 전체 잔뜩 실패합니다.

새 스레드를 시작하고 C++ DLL을 호출하고 해당 스레드의 아파트 상태가 멀티 스레드인지 확인해야합니다. 스레드의 아파트 상태는 Thread.SetApartmentState을 사용하여 설정할 수 있지만 모든 새 스레드는 기본적으로 다중 스레드입니다.