在新托管线程中通过 C# 在混合模式程序集中调用 STL 矢量的push_back

Calling STL vector's push_back in a mixed mode assembly via C# in a new managed thread

本文关键字:STL 调用 back push 集中 程序 线程 新托管 模式 混合 程序集      更新时间:2023-10-16

我正在编写一个WPF应用程序,它的核心魔力是用本地c++实现的,它被c++/CLI类很好地包装在一个混合模式程序集中。

在c++/CLI包装器类的方法中,我创建了一个向量的新实例并推回一个值:

void Wrapper::CallVectorPushBack()
{
    vector<int> foo;
    foo.push_back(1);
}

当在应用程序的主线程中运行代码时,这工作得很好。

现在让我们尝试在一个新的托管线程中调用上面的代码:

Task.Factory.StartNew(() => { Wrapper.CallVectorPushBack(); });

为执行上面的代码创建一个新线程时,对vector实例的第一个push_back调用将锁定该线程。新线程卡住了,Visual Studio在线程窗口中将_MtxLock显示为地址。

要使代码运行需要什么?

提前感谢!

干杯!

我找到了问题:

c++/CLI包装器DLL实现了一个DllMain方法,该方法通过注册表库(https://code.google.com/p/cregistry/)读取注册表项。在try catch块中读取不存在的注册表项会破坏上述应用程序的线程功能…