【问题标题】:Electron Windows app close not ending threadsElectron Windows 应用程序关闭未结束线程
【发布时间】:2019-02-05 22:09:45
【问题描述】:

我有一个 Electron 应用程序,在 Windows 上运行,它在主窗口上有一些控件和一个取消按钮。我注意到当它运行时我看到两个线程,我假设主线程和渲染器线程。当点击取消按钮时,渲染器向主线程发送 IPC 消息,主线程调用 app.quit。在这些条件下,两个线程结束。如果我右键单击应用程序的 Windows 任务栏中的图标并选择“关闭”,则线程仅在应用程序在 VSCode 调试器下运行时结束,当应用程序在没有调试器的情况下运行时,两个线程仍然存在.

我该如何调试呢?关于为什么会发生的任何建议。

在调试器下,我看到在主线程中捕获了关闭并调用了 app.quit。

更新:由于该应用程序使用的是 Electron 1.7.9,因此我已将其更新为使用 2.0.8,以防万一这是已解决的问题。但是,对于 2.0.8,问题仍然存在。

席德

【问题讨论】:

  • 使用 SysInternals Process Explorer 我可以看到剩下的两个进程是应用程序启动进程和主进程。渲染器进程即将关闭。
  • 我仍在努力解决这个问题,到目前为止,除了我的问题中的更新之外,我几乎没有取得任何进展。即使是有关如何调试此问题的建议也将不胜感激。

标签: windows electron


【解决方案1】:

感谢 Electron Slack 社区的一些反馈,我已经解决了这个问题。我的错误在于我调用 app.quit() 方法的方式。

我的代码在“关闭”事件上处理 MainWindow 并在该事件处理程序中执行 app.quit() 方法。

关闭应用的正确方法是处理应用“window-all-closed”事件并在那里执行app.quit()方法。

这是发送给我以帮助我解决问题的 Electron 应用程序的骨架 main.js 的要点。

https://gist.github.com/sidprice/612cb49cec923eeb94cfcddf1736c181

席德

【讨论】:

  • 记得在 electron app.quit() 之后返回,因为它不是像 process.exit() 这样的终端方法。
猜你喜欢
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多