使用 UnmanagedExports 显示和关闭 c# 窗体 c++
display and close c# form c++ using UnmanagedExports
我需要显示带有消息的 C# 窗体 'Please wait',然后在后台执行其他任务。当这些额外的任务完成后,我必须 hide/close 该表格。我在 C++ 控制台应用程序中这样做。我正在调用函数来显示和关闭窗体,这些窗体在 C# 中定义并使用 UnmanagedExports 公开。问题是表单没有正确显示(所有控件都没有加载),当光标放在表单上时它显示加载状态。如何正确显示表单、执行任务然后关闭表单?
C++代码:
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#代码:
[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();
}
我通过添加 Application.DoEvents(); 设法解决了这个问题;在 form.show() 之后;现在它工作正常并且表格显示正确。现在最终的 showForm c# 代码变为:
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(owner);
Form_Wait form = new Form_Wait();
form.label_message.Text = message;
form.Show(nativeWindow);
Application.DoEvents();
此致
我需要显示带有消息的 C# 窗体 'Please wait',然后在后台执行其他任务。当这些额外的任务完成后,我必须 hide/close 该表格。我在 C++ 控制台应用程序中这样做。我正在调用函数来显示和关闭窗体,这些窗体在 C# 中定义并使用 UnmanagedExports 公开。问题是表单没有正确显示(所有控件都没有加载),当光标放在表单上时它显示加载状态。如何正确显示表单、执行任务然后关闭表单?
C++代码:
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#代码:
[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();
}
我通过添加 Application.DoEvents(); 设法解决了这个问题;在 form.show() 之后;现在它工作正常并且表格显示正确。现在最终的 showForm c# 代码变为:
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(owner);
Form_Wait form = new Form_Wait();
form.label_message.Text = message;
form.Show(nativeWindow);
Application.DoEvents();
此致