Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;在C#DLL中更新GUI的代码 我有一个C++应用程序(调用特定硬件组件的SDK函数),并希望在C语言中显示它的数据。C部分是C++调用的DLL。(这是客户的要求,因此我没有太多选择。)_C#_C++_Multithreading_Unmanaged - Fatal编程技术网

C++;在C#DLL中更新GUI的代码 我有一个C++应用程序(调用特定硬件组件的SDK函数),并希望在C语言中显示它的数据。C部分是C++调用的DLL。(这是客户的要求,因此我没有太多选择。)

C++;在C#DLL中更新GUI的代码 我有一个C++应用程序(调用特定硬件组件的SDK函数),并希望在C语言中显示它的数据。C部分是C++调用的DLL。(这是客户的要求,因此我没有太多选择。),c#,c++,multithreading,unmanaged,C#,C++,Multithreading,Unmanaged,我对C#不是很精通,所以可能遗漏了一些明显的东西,但我在显示GUI和更新GUI时遇到了问题 我使用访问C代码,代码大致如下(ptr是一个类变量): 然后在另一个线程中: if (updating) (*ptr)->Update(data) 在C方面,我们有: FormClass myForm; void ShowForm() { myForm = new FormClass(); Application.Run(myForm); } void Update(Data data) { my

我对C#不是很精通,所以可能遗漏了一些明显的东西,但我在显示GUI和更新GUI时遇到了问题

我使用访问C代码,代码大致如下(
ptr
是一个类变量):

然后在另一个线程中:

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?在更新中使用Invoke/BackgroundWorker而不是直接调用myForm的方法会有帮助吗?

您必须在UI线程上更新C#GUI。有关如何从另一个线程同步到GUI线程,请参见此答案

在VisualStudio中进行调试时,您可能会发现调试位置工具栏非常方便,可以确定当前处于哪个线程中

您必须在UI线程上更新C#GUI。有关如何从另一个线程同步到GUI线程,请参见此答案

在VisualStudio中进行调试时,您可能会发现调试位置工具栏非常方便,可以确定当前处于哪个线程中

FormClass myForm;
void ShowForm()
{
myForm = new FormClass();
Application.Run(myForm);
}
void Update(Data data)
{
myForm.Update(data)
}