我有一个C ++应用程序(为特定硬件组件调用SDK的功能),并希望在C#GUI中显示其数据。 C#部分是C ++调用的DLL。 (这是根据客户的要求,所以我没有太多选择。)
我不太熟悉C#,所以可能会遗漏一些明显的东西,但我遇到了显示GUI和更新它的问题。
我使用this method访问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)
}
当我使用Application.Run或ShowDialog来显示我的GUI时,表单很好地显示,但更新使应用程序崩溃。使用Show会让GUI卡住。使用BeginInvoke导致GUI永远不会出现。
在这个设置下,有没有推荐的方法让我启动GUI?在Update中使用Invoke / BackgroundWorker而不是直接调用myForm的方法会有帮助吗?
答案 0 :(得分:2)
您必须在UI线程上更新C#GUI。请参阅此答案,了解如何从另一个线程同步到GUI线程。
C# Windows Forms Application - Updating GUI from another thread AND class?
您可能还会找到“调试位置”工具栏,以确定在Visual Studio中进行调试时当前所处的线程