我的 C++ 类中有几个成员函数,我将它们打包为 dll 并尝试在 C# 应用程序中使用它们。
我试图通过简单地使用线程执行它们然后将它们分离()来创建两个异步函数,这样它们就不会阻塞调用者线程直到它们结束。在基于 C++ 的应用程序中,每当我使用线程以这种方式调用函数时,它们都可以工作,但是当我尝试从 c# 调用我的异步函数之一时,我的应用程序崩溃或挂起!
这些是我所谓的异步函数!:
void xGramManipulator::CreateMonoGramAsync()
{
thread t(&xGramManipulator::ReadMonoGram, this);
t.detach();
}
void xGramManipulator::CreateBiGramAsync()
{
thread t = thread(&xGramManipulator::ReadBiGram, this);
t.detach();
}
这是驻留在 dll 中的 c 中的包装函数:
//header
CDLL_API void CreateMonoGramAsync(void);
//cpp
CDLL_API void CreateMonoGramAsync(void)
{
xG.CreateMonoGramAsync();
}
这是调用该函数的 c# 应用程序:
private void btnTest_Click(object sender, EventArgs e)
{
try
{
CreateBiGramAsync();
CreateMonoGramAsync();
}
catch (Exception)
{
}
}
我应该怎么做才能在我的班级中拥有真正的异步和非阻塞成员函数?我在这里想念什么?