我从 WPF 应用程序中的 c# 代码访问 c++ dll 库。从ui线程访问dll时我没有问题。但是我需要 UI 在 c++ dll 的代码运行时做出响应。所以我尝试从另一个线程访问它。但是当我第一次尝试在非 ui 线程中调用相同的函数(我从 ui 线程调用)时,函数返回但返回值表明函数中存在内部错误。但是,当我从非 ui 线程运行代码一次或两次以上时,它会成功返回一个非错误值。我没有 dll 的源代码,所以我不确定里面发生了什么。
c++ 函数
UINT32 myfunc1()
在 C# 中
[DllImport("mydll.dll")]
public static extern uint myfunc1();
我如何到达 ui 线程中的代码
uint errorCode = myfunc1(); // returns 0 means no error occured
我如何在非 ui 线程中获取代码
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, args) => { args.Result = myfunc1(); };
// 1st call args.Result is 10 means internal error ocurred
// 2nd call args.Result is sometimes 0 and sometimes 10
// 3rd or later calls args.Result is 0 means no error occured
worker.RunWorkerCompleted += doSth();
worker.RunWorkerAsync();