我正在编写一个WPF应用程序,它在本机C ++中发挥其核心作用,很好地由混合模式程序集中的C ++ / CLI类包装。
在C ++ / CLI包装器类的方法中,我正在创建一个向量的新实例并推回一个值:
void Wrapper::CallVectorPushBack()
{
vector<int> foo;
foo.push_back(1);
}
在应用程序的主线程中运行代码时,这样可以正常工作。
现在让我们尝试在C#的新托管线程中调用上面的代码:
Task.Factory.StartNew(() => { Wrapper.CallVectorPushBack(); });
当创建用于执行上述代码的新线程时,向量实例上的第一个push_back调用将锁定该线程。新线程卡住,Visual Studio在“线程”窗口中将_MtxLock显示为地址。
使代码运行需要什么?
提前谢谢!
干杯!
答案 0 :(得分:0)
我追查了这个问题:
C ++ / CLI包装器DLL实现了一个DllMain方法,该方法使用CRegistry库(https://code.google.com/p/cregistry/)读取注册表项。在try catch块中读取不存在的注册表项f *提高了上述应用程序的线程化能力......