c# - 我可以加快从 C++ Dll 到 C# 的回调吗?

标签 c# c++ dll callback

我们已经在 C++ Dll 中实现了主要代码功能,然后在其上编写了 C# UI。这在大多数情况下工作正常,但在我们希望 UI 报告 C++ 函数进度的区域,我们遇到了一些性能问题。

我们将指向 C# 函数的指针向下传递给 Dll,以用于进度更新。当它被调用时,我们使用 InvokeRequired 和 Invoke() 来确保回调是线程安全的。从 C++ 端测量,这可能需要 16 毫秒到 180 毫秒之间的任何时间。有什么方法可以减少这需要的时间吗?

其中一个回调传递要在屏幕上绘制的线条的位置。此绘图当前非常慢 - 我假设调用的函数正在排队并需要时间在 C# 中绘制。我可以看到两种处理方法: 1. 更改回调以发送线路列表并允许线路在 C++ 中排队,同时等待先前对 C# 的调用完成。 2. 在 C# 中将线条添加到队列中(最好不调用 Invoke),然后一次绘制所有可用的线条。 关于如何执行此操作的任何建议,是否需要这两个选项,或替代方法?

感谢所有帮助。

最佳答案

您可以使用 BeginInvoke 而不是 InvokeInvoke 等待函数返回,而 BeginInvoke 允许函数与当前线程并行运行。

关于c# - 我可以加快从 C++ Dll 到 C# 的回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5177119/

相关文章:

c# - 统一公共(public)变量未与 gameObject.find 一起显示

最小化屏幕时 C# LinearGradientBrush 故障

c++ - 我如何在这个循环中使用 openMP?

c++ - 与共享库链接时 undefined reference

c++ - Visual Studio C++ 把 .exe +.dll 变成只有 .exe

c# - 使用 C++ dll 的 C# 应用程序中的堆栈溢出

c# - 不调用静态构造函数

c# - WPF 字符串资源中的换行符

C++ 错误预期在数字常量之前为 ' ' 或 '...'

java - 如何设置JAssimp?