C++代码更新C#DLL中的GUI
C++ code updating the GUI in C# DLL
我有一个C++应用程序(为特定硬件组件调用SDK的函数),并希望在C#GUI中显示其数据。C#部分是C++调用的DLL。(这是客户的要求,所以我没有太多选择。)
我对C#不是很精通,所以可能缺少一些明显的东西,但我在显示GUI和更新GUI时都遇到了问题
我使用这个方法访问C#代码,代码大致如下(ptr
是一个类变量):
// Initialize COM.
CoInitialize(NULL);
ptr = new IPtr(__uuidof(ManagedClass));
(*ptr)->ShowForm();
然后在另一个线程中:
if (updating) (*ptr)->Update(data)
在C#方面,我们有:
FormClass myForm;
void ShowForm()
{
myForm = new FormClass();
Application.Run(myForm);
}
void Update(Data data)
{
myForm.Update(data)
}
当我使用应用程序时。运行或ShowDialog来显示我的GUI,表单显示得很好,但更新会导致应用程序崩溃。使用Show会使GUI陷入困境。使用BeginInvoke导致GUI从未出现。
在这种设置下,有什么建议我启动GUI的方法吗?在Update中使用Invoke/BackgroundWorker而不是直接调用myForm的方法会有帮助吗?
您必须在UI线程上更新C#GUI。有关如何从另一个线程同步到GUI线程,请参阅此答案。
C#Windows窗体应用程序-从另一个线程和类更新GUI?
在VisualStudio中调试时,您可能还发现"调试位置"工具栏非常方便,可以确定当前所在的线程
https://blogs.msdn.microsoft.com/davedev/2012/07/18/where-is-the-suspend-resume-and-terminate-toolbar-in-visual-studio-2012-ultimate/
相关文章:
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- 从 Windows 中的其他应用程序 GUI 中提取数据
- 多线程Windows GUI应用程序中的死锁
- 尝试在 c++ 中的 Fltk GUI 中右键单击
- 创建小部件的GUI菜单不会出现在QT创建者中
- 如何处理Qt源代码中带有"±"的GUI字符串?
- Qt C++ "keine Rückmeldung" - 长时间计算期间 GUI 中的错误
- 使用导入的图像保存在 QT 中的 QLabel 中,保存 GUI 的状态
- 在执行后台任务时与Objective-C中的GUI交互
- 在基本的GUI编程中,在哪里声明对象和方法
- C++代码更新C#DLL中的GUI
- 更改线程中的GUI
- 一个 c++ 中的 gui 库作为 Web 客户端
- DialogBoxParam()方法未调用IE 9或更高版本中的GUI
- 可能吗?C# 中的 GUI,C++ 中的应用程序
- Qt中的GUI应用程序是否可以在运行时监听命令行参数?
- 将终端的输入/输出重定向到iOS JB中的gui
- C++提升线程正在锁定 MFC 中的 GUI 线程
- OpenGL中的GUI工具包