问题标签 [application-shutdown]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1344 浏览

android - 手机没电时是否会在应用程序中调用 onDestroy?

手机没电时会调用 onDestroy 方法吗?我想它没有。不幸的是,我现在没有手机可以测试这个,否则我只会自己检查。

0 投票
3 回答
85 浏览

c# - 如何从取消的登录表单中干净地短路我的应用程序,并在登录成功时调用我的主表单?

我有一个在主表单之前显示的登录表单,使用 Program.cs 中的以下代码:

如果用户选择“关闭”按钮(而不是尝试登录),登录表单应该关闭,主表单不应该显示,并且应用程序应该关闭。如果用户选择“确定”按钮,登录表单应该关闭,然后应该显示主表单。

发生的情况是选择“关闭”按钮会导致应用程序崩溃,并发出叮叮当当的龚秀式“崩溃”声音。我的日志文件中有这个异常消息:

日期:2009 年 4 月 9 日晚上 8:57:51 消息:到达 frmLogin.buttonOK_Click 日期:2009 年 4 月 9 日晚上 8:57:51 消息:来自应用程序范围的异常处理程序:System.NullReferenceException:NRBQ.frmLogin 处的 NullReferenceException .GetSiteNum() 在 NRBQ.frmLogin.buttonOK_Click(Object sender, EventArgs e) 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows。 Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam) 在 System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam) 在 Microsoft.AGL.Forms.EVL.EnterModalDialog(IntPtr hwnModal) 在NRBQ.Program.Main() 处的 System.Windows.Forms.Form.ShowDialog()

这是登录表单中的相关代码:

注意:“OK”按钮的 DialogResult 设置为“OK”;“关闭”按钮的 DialogResult 设置为“取消”

为什么 Application.Exit() 会导致应用程序崩溃?终止应用程序的更友好、更温和的方式是什么?

为什么选择 Okay 按钮不允许主窗体随后显示?即使选择“确定”按钮(如果完整性检查通过),登录表单也会关闭,但仅此而已……主表单不显示。

更新

我根据下面的答案修改了我的代码,现在取消工作正常(关闭应用程序而没有 klang/crash),但在登录表单上选择“确定”按钮后,我仍然没有看到我的主表单,即使我在登录表单代码中以编程方式将 DialogResult 设置为 OK。

相关代码如下。

程序.CS

FRMLOGIN.CS

这是我在日志文件中看到的:

日期:2009 年 4 月 9 日晚上 9:56:47 消息:到达 frmLogin.buttonOK_Click 日期:2009 年 4 月 9 日晚上 9:56:48 消息:来自应用程序范围的异常处理程序:System.NullReferenceException:HHS.frmLogin 处的 NullReferenceException .GetSiteNum() 在 HHS.frmLogin.get_SiteNumber() 在 HHS.Program.Main()

正如 Merle Haggard 所唱的那样,“所以现在它又回到了密码室……

更新 2

我在 GetSiteNum() 中添加了一个消息框:

......我没有看到它,所以它正在爆炸:

...在此登录表单上选择“确定”按钮后。

0 投票
1 回答
86 浏览

visual-studio-2010 - 调试器关闭时如何捕获Qt应用程序的退出?

我正在使用 Visual Studio 2010 在 Qt 4.8.4 中开发一个 GUI 应用程序。我需要在我的应用程序关闭之前执行一些清理工作,因此我在 MainWindow 类中重新实现了 QWidget closeEvent 以捕获用户单击 X 或当他们选择时文件->从菜单中退出。这很好用。然而,问题是当我在 VS 调试器中运行应用程序并使用调试器关闭应用程序时,不会触发关闭事件。我总是可以通过单击 File->Exit 或单击 X 来关闭我的应用程序,但有时我会忘记并关闭调试器,所以这真的更令人烦恼。有没有办法在调试器关闭我的应用程序时进行捕获?

0 投票
1 回答
925 浏览

c# - C# 控制台应用程序 Environment.Exit(0) 未被识别为关闭事件

我有一个简单的库,它覆盖控制台的关闭事件以在关闭之前完成各种任务。这在用户或外部程序关闭控制台(ctrl+C、关闭窗口等)时有效,但是,当控制台应用程序使用 Environment.Exit() 时,它会关闭而不被识别为关闭事件之一。

这是关闭处理程序的代码:

应用程序本身使用关闭处理程序 (ConsoleHandler),如下所示:

我认为 ConsoleHandler 类中的 CtrlType 枚举是罪魁祸首,但我似乎无法弄清楚缺少哪些值。

有任何想法吗?

0 投票
1 回答
748 浏览

c# - MemoryCache 避免在关机时刷新

System.Runtime.MemoryCache在 Web 服务集成层中使用 a 来保留一些外部且检索缓慢的产品列表。但是,我想在它们过期时刷新它们,以使我的呼叫者免于等待。出于这个原因,我正在使用 IIS7.5 预热这个缓存,并RemovedCallback在过期时重新加载数据。

但是,当 Web 池进程优雅地终止时会发生什么?MemoryCache 是一次性的,因此它会将我的对象踢出,此时我将尝试将一个新实例塞回去,同时暂停整个过程。有什么方法可以让我安全地检测到我不应该重新加载数据?

0 投票
1 回答
1399 浏览

delphi - 如何区分 UI 关闭和使用 Delphi 强制关闭

如果用户尝试关闭应用程序,我想显示关闭查询确认对话框。如果系统关闭或任务或进程正在从任务管理器结束,我只想清理并关闭。

我试过这段代码:

...

...

弹出确认显示我是关闭程序还是从任务管理器终止进程。

0 投票
3 回答
1199 浏览

c++ - 在程序关闭期间终止 Qt 工作线程

我使用 Qt 4.8.6、MS Visual Studio 2008、Windows 7。我创建了一个 GUI 程序。它包含主 GUI 线程和工作线程(顺便说一下,我还没有创建QThread子类),它们对第 3 方 DLL 函数进行同步调用。这些功能相当缓慢。QTcpServer实例也在工作线程下。我的工作类包含QTcpServerDLL 包装器方法。

我知道这quit()是首选terminate(),但我不想在程序关闭期间等待一分钟(因为缓慢的 DLL 函数)。当我尝试工作线程时,我注意到有关从另一个线程terminate()停止的警告。QTcpServer进程关闭的正确方法是什么?

0 投票
1 回答
1513 浏览

java - 如何执行正常关闭 (Java)?

我了解正常关闭会完成预先存在的请求,同时拒绝新请求。

我将如何优雅地关闭运行在 Apache Tomcat 实例上的 Java 应用程序?不确定我是否需要扩展我当前的应用程序或者它是否是一个简单的终端命令。

0 投票
3 回答
2124 浏览

c# - 在 WinForms 应用程序中关闭套接字服务器的正确方法?

我正在使用 C# 开发一个基本的套接字服务器,它需要作为 Windows 窗体应用程序的一部分运行。我从MSDN的异步套接字服务器代码开始。像许多套接字服务器代码示例一样,这是一个控制台模式应用程序。下面是从 Main() 调用的 StartListening() 方法的示例:

如您所见,其中有一个 while(true) 循环,它使用 ManualResetEvent 等待客户端连接建立,然后再进入 while 循环的下一次迭代。我不确定他们为什么包含该Console.WriteLine(\n"Press ENTER to continue...")语句,因为无法摆脱 while(true) 循环。

无论如何,在考虑将其转换为 WinForms 应用程序时,我显然需要在另一个线程上运行服务器,但是当用户关闭我的应用程序时,我想确保套接字服务器“正确”关闭。我对这意味着什么的最佳猜测是关闭任何打开的客户端连接,打破侦听循环,然后关闭服务器套接字(不一定按此顺序)。

我已经看到一些建议,建议只将服务器线程设置为后台线程,并在应用程序关闭时让它被销毁,但这似乎不是很“干净”。例如,如果一个客户端在应用程序关闭时连接并发送数据,这对客户端有什么影响?任何人都可以提出关于正确关闭套接字服务器的“最佳实践”吗?

0 投票
1 回答
248 浏览

java - 仅在 ctrl^C 上执行任务(Runtime.getRuntime().addShutdownHook(Thead t) )

我正在开发一个具有完整 java 代码和 SQL 的项目,应用程序从 shell 脚本启动。当用户按下 Ctrl^C 时,我想执行一些清理任务(关闭事务 n 记录突然消息)。

我尝试通过 Runtime.getRuntime().addShutdownHook(Thread) 添加关闭任务

但是每次我的应用程序退出 VM 时它都会执行,我永远不知道该命令是否已成功终止/执行。

我正在寻找一些实现这一点的指针。

  • 提前致谢..!!!