2013-05-26 67 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進行設置,但所有新線程默認都是多線程的。