Windows:最小化无响应的窗口

Windows:最小化无响应的窗口

我有一个窗口正在进行一些长时间的计算。我想将其最小化,这样我就可以访问我的桌面,但它不响应事件(一个线程忙于计算)。我本以为这个问题会在 win8.1 中得到修复?

在Linux中:单击最小化,无论如何窗口都会最小化。

我认为区别在于在 Linux 上,操作系统负责窗口工具栏事件以及其可以执行的操作的权限。

答案1

不,区别在于窗口重影功能,看一下:禁用进程WindowsGhosting()

禁用调用 GUI 进程的窗口重影功能。窗口重影是 Windows 管理器的一项功能,可让用户最小化、移动或关闭无响应的应用程序的主窗口。

要禁用它,您可以使用应用程序兼容性工具包创建并安装自定义应用程序兼容性数据库来禁用程序的 Ghost Window 功能。

要下载应用程序兼容性工具包,请访问以下 Microsoft 网站。

答案2

对于 Windows,应用程序处理 UI 重绘。如果程序员使用 UI 线程进行计算,那么您就陷入困境了。这不是 Windows 版本的错,而是应用程序作者的编程不够优雅。;)

微软有非常好的文档涵盖您所描述的现象以及应用程序员如何避免它。

防止 Windows 应用程序挂起

简介:

用户喜欢响应式应用程序。当他们点击菜单时,他们希望应用程序能够立即做出反应,即使它当前正在打印他们的工作。当他们在他们最喜欢的文字处理器中保存一份冗长的文档时,他们希望在磁盘仍在旋转时继续输入。当应用程序没有及时响应他们的输入时,用户很快就会不耐烦。

程序员可能会认识到应用程序不立即响应用户输入的许多合理原因。应用程序可能正忙于重新计算某些数据,或者只是在等待其磁盘 I/O 完成。但是,从用户研究中,我们知道用户在几秒钟无响应后就会感到恼火和沮丧。5 秒钟后,他们会尝试终止挂起的应用程序。除了崩溃之外,应用程序挂起是使用 Win32 应用程序时最常见的用户中断源。

最佳实践简介:

保持 UI 线程简单

UI 线程的主要职责是检索和发送消息。任何其他类型的工作都可能导致此线程所拥有的窗口挂起。

做:

  • 将导致长时间运行操作的资源密集型或无限制算法移至工作线程
  • 识别尽可能多的阻塞函数调用,并尝试将它们移至工作线程;任何调用另一个 DLL 的函数都应该是可疑的
  • 额外努力从工作线程中删除所有文件 I/O 和网络 API 调用。这些函数可能会阻塞几秒钟甚至几分钟。如果您需要在 UI 线程中执行任何类型的 I/O,请考虑使用异步 I/O
  • 请注意,你的 UI 线程还为你的进程托管的所有单线程单元 (STA) COM 服务器提供服务;如果你发出阻塞调用,这些 COM 服务器将无响应,直到你再次为消息队列提供服务

相关内容