WPF并发模型

本文关键字:模型 并发 WPF | 更新日期: 2023-09-27 18:15:27

我正在开发一个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并发模型

是,WPF UI线程将COM公寓状态初始化为单线程。如果它不是一个单线公寓,那么一大堆东西就会失败。

你需要启动一个新线程,调用你的c++ DLL,并确保该线程的公寓状态是多线程的。线程的公寓状态可以使用thread来设置。SetApartmentState,但是所有的新线程默认都是多线程的