我有一个 Inno Setup 安装,它执行一些耗时的“AfterInstall”操作。当执行此操作时,安装 GUI 完全冻结(似乎它的主事件循环未处理)。这不是一个愉快的最终用户体验,所以也许这个操作可能不冻结 GUI?就像在单独的线程中执行它或定期调用类似的东西handleGuiEventLoop()
?
对于“操作”,我从 .dll 调用我的函数,该函数发出许多 HTTP 请求并将响应作为文件写入应用程序安装文件夹。这不是 CPU 密集型操作,但可能需要几秒钟的时间。或者,如果互联网连接很弱/没有可用的互联网连接,则可能需要一两分钟。并且安装程序 GUI 一直处于冻结状态。
The 输出进度页面 http://www.jrsoftware.org/ishelp/topic_isxfunc_createoutputprogresspage.htm旨在提供有关长时间运行的操作的反馈。
但为了使其有效,您必须能够通过定期调用此页面上的方法来让 Inno 更新您当前的进度。
有一个图书馆可以让你将 Inno 脚本函数作为回调传递给 DLL http://www.sherlocksoftware.org/page.php?id=54,这可能有用。您可能还想考虑使用同一站点的 ITDownload 脚本,它允许您从 Inno 本身内部进行 HTTP 访问,从而避免中间人。
然而 Inno 本质上是单线程和 GUI 线程仿射的,因此直接调用阻塞操作将始终阻塞 UI,无需特殊规定。从单独的线程中运行代码是可能的(但只能在 DLL 中,并且您必须very小心);其他选项包括仅进行异步调用,或内部维护 GUI 更新的调用,例如Exec
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)