我正在开发一个 C# WPF 应用程序,它使用 PInvoke 调用非托管 C++ DLL 函数。 WPF 应用程序是使用 Blend 创建的。
非托管 C++ DLL 从 PInvoke 函数调用 CoInitializeEx(NULL, COINIT_MULTITHREADED)
。我在这行代码中收到一条错误消息,提示 "COM library already initialized with incompatible concurrency model"
我假设 WPF 本身就是 STAThread。我对吗?
如何修复上述错误?
最佳答案
是的,WPF UI 线程会将 COM 单元状态初始化为单线程。如果它不是单线程单元,那么一大堆东西都会失败。
您需要启动一个新线程并调用您的 C++ DLL 并确保该线程的单元状态是多线程的。可以使用 Thread.SetApartmentState 设置线程的单元状态, 但默认情况下所有新线程都是多线程的。
关于c# - WPF 并发模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755106/