2013-05-26 4 views
1

Я работаю над приложением C# WPF, которое вызывает неуправляемые функции DLL на C++, используя PInvoke. Приложение WPF было создано с использованием Blend.Модель параллелизма WPF

Неуправляемая DLL на C++ вызывает CoInitializeEx(NULL, COINIT_MULTITHREADED) из функции PInvoke. Я получаю сообщение об ошибке в этой строке кода: "COM library already initialized with incompatible concurrency model"

Я предполагаю, что WPF по своей сути является STAThread. Я прав?

Как исправить вышеуказанную ошибку?

ответ

0

Да, поток WPF UI инициализирует состояние COM-квартиры как однопоточное. Если это не одиночная одиночная квартира, целая куча вещей не удастся.

Вам нужно будет начать новый поток и вызвать вашу C++ DLL и убедиться, что состояние квартиры этого потока многопоточно. Состояние квартиры в потоке может быть установлено с помощью Thread.SetApartmentState, но все новые потоки по умолчанию являются многопоточными.

Смежные вопросы