【问题标题】:WPF concurrency modelWPF 并发模型
【发布时间】:2013-05-21 05:50:48
【问题描述】:

我正在开发一个使用 PInvoke 调用非托管 C++ DLL 函数的 C# WPF 应用程序。 WPF 应用程序是使用 Blend 创建的。

非托管 C++ DLL 从 PInvoke 函数调用 CoInitializeEx(NULL, COINIT_MULTITHREADED)。我在这行代码中收到一条错误消息,上面写着"COM library already initialized with incompatible concurrency model"

我假设 WPF 本质上是 STAThread。我对吗?

如何解决上述错误?

【问题讨论】:

    标签: c# c++ wpf unmanaged


    【解决方案1】:

    是的,WPF UI 线程会将 COM 单元状态初始化为单线程。如果不是单线程单元,那么一大堆东西都会失败。

    您需要启动一个新线程并调用您的 C++ DLL 并确保该线程的单元状态是多线程的。可以使用Thread.SetApartmentState 设置线程的单元状态,但默认情况下所有新线程都是多线程的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多