我正在编写一个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块中读取不存在的注册表项会破坏上述应用程序的线程功能…