子进程退出时,父对话框接收WM_CLOSE

时间:2015-05-08 20:18:13

标签: c# winforms

我遇到的情况是,在64位计算机上运行时,我的C#应用​​程序使用32位和64位DLL的混合。我的主UI必须是64位,子对话必须是32位。为了解决这个问题,我从64位版本启动了32位版本的应用程序并等待它退出。我使用匿名管道将子对话框的结果返回到64位进程。我将父窗口句柄传递给子进程,因此32位进程的子对话框将是父进程中主对话框的模态。这非常好用,但问题是当子进程关闭64位进程中的父对话框时收到WM_CLOSE消息并且应用程序存在。如何在64位进程中将32位进程模式中的子对话框保存到父对话框时如何防止这种情况?

如果我没有传递父对话窗口句柄,则应用程序不会关闭。

1 个答案:

答案 0 :(得分:0)

我发现当我尝试这种情况时,子窗口会挂起。此处的其他帖子建议您不能将对话框的父级设置为来自不同线程的对话框。

为了解决这个问题,我做了以下几点:

  1. 在启动子进程之前调用EnableWindow(parent,false)
  2. 在命令行上将主窗体句柄传递给子进程。
  3. 在子进程中的子对话框句柄上调用SetWindowLong(child,GWL_HWNDPARENT,parent)
  4. 子进程结束时调用EnableWindow(parent,true)
  5. 现在一切都很好。