【问题标题】:Parent dialog receiving WM_CLOSE when child process exits子进程退出时父对话框接收 WM_CLOSE
【发布时间】:2015-05-08 20:18:13
【问题描述】:

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

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

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    我在尝试此操作时发现有时子窗口会挂起。此处的其他帖子建议您不能将对话框的父级设置为来自不同线程的对话框。

    为了解决这个问题,我做了以下操作:

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

    现在一切正常。

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多