首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用UnmanagedExports显示和关闭c# form c++

使用UnmanagedExports显示和关闭c# form c++
EN

Stack Overflow用户
提问于 2018-09-03 00:10:32
回答 1查看 54关注 0票数 0

我需要显示一个带有消息“请稍候”的C#表单,然后在后台执行其他任务。当这些额外的任务完成后,我必须隐藏/关闭该表单。我在c++控制台应用程序中执行此操作。我将调用显示和关闭表单的函数,这些表单是在C#中定义的,并使用UnmanagedExports公开。问题是窗体没有正确显示(所有控件都没有加载),当光标放在窗体上时,它会显示加载状态。如何正确显示表单、执行任务,然后关闭表单?

C++代码:

代码语言:javascript
运行
复制
using CSharpFormShow = void(__stdcall *)(HWND hwnd, wchar_t* message);
using CSharpFormClose = void(__stdcall *)();
int _tmain(int argc, _TCHAR* argv[])
{
    HMODULE mod = LoadLibraryA("CSharp.dll");
    CSharpFormShow formShow = reinterpret_cast<CSharpFormShow>(GetProcAddress(mod, "formshow"));
    CSharpFormClose formClose = reinterpret_cast<CSharpFormClose>(GetProcAddress(mod, "formclose"));
    formShow(hwnd,L"This is a message");
    //perform some tasks
    formClose();
    getchar();
    return 0;
}

C#代码:

代码语言:javascript
运行
复制
[DllExport(ExportName = "formshow", CallingConvention = CallingConvention.StdCall)]
public static void showForm(IntPtr owner, [MarshalAs(UnmanagedType.LPWStr)]string message)
{
    NativeWindow nativeWindow = new NativeWindow();
    nativeWindow.AssignHandle(owner);
    Form_Wait form = new Form_Wait();
    form.label_message.Text = message;
    form.Show(nativeWindow);
}
[DllExport(ExportName = "formclose", CallingConvention = CallingConvention.StdCall)]
public static void closeForm()
{
    form.Dispose();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-05 03:39:31

我设法解决了这个问题,在form.show()之后添加了Application.DoEvents();现在它工作得很好,表单也显示得很好。现在,最终的showForm c#代码变成:

代码语言:javascript
运行
复制
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(owner);
Form_Wait form = new Form_Wait();
form.label_message.Text = message;
form.Show(nativeWindow);
Application.DoEvents();

问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52138790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档