【发布时间】:2016-10-15 21:39:02
【问题描述】:
我有一个 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 的方法会有所帮助吗?
【问题讨论】:
标签: c# c++ multithreading unmanaged