C# 系统关闭时强制应用程序关闭
我有一个Windows窗体应用程序,当主窗口关闭时,它会显示一个基本对话框,确认操作。如果用户决定取消,则取消应用程序退出 但是,当应用程序运行最小化并且用户希望关闭电脑时,关闭顺序停止,因为我的应用程序正在等待用户确认应用程序关闭(显示对话框) 我曾想过添加一个计时器来超时,如果在一定时间内没有应答,则自动关闭应用程序,但即使这是一种方式,也肯定不是其他应用程序都是这样做的 那么,除非系统正在关闭,否则在其他情况下,有什么最佳的解决方案来确认应用程序关闭C# 系统关闭时强制应用程序关闭,c#,winforms,shutdown,C#,Winforms,Shutdown,我有一个Windows窗体应用程序,当主窗口关闭时,它会显示一个基本对话框,确认操作。如果用户决定取消,则取消应用程序退出 但是,当应用程序运行最小化并且用户希望关闭电脑时,关闭顺序停止,因为我的应用程序正在等待用户确认应用程序关闭(显示对话框) 我曾想过添加一个计时器来超时,如果在一定时间内没有应答,则自动关闭应用程序,但即使这是一种方式,也肯定不是其他应用程序都是这样做的 那么,除非系统正在关闭,否则在其他情况下,有什么最佳的解决方案来确认应用程序关闭 谢谢大家! 在FormClosing事
谢谢大家! 在FormClosing事件中,检查“属性”以查看窗口关闭的原因。如果是
CloseReason.WindowsShutDown
,则不显示对话框,也不取消表单的关闭
private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
// Verify that we're not being closed because windows is shutting down.
if (e.CloseReason != CloseReason.WindowsShutDown)
{
// Show your dialog / cancel closing.
}
}
N.B:您可能还希望包括
CloseReason.taskmanager关闭
,因为用户显然希望在该场景中关闭您的应用程序,而taskmanager已经要求确认。或者只显示CloseReason.UserClosing
的对话框 您可以在没有消息框的情况下侦听并退出应用程序。您可以使用application.SessionEnding事件了解系统是否即将关闭
在关闭事件处理程序中,可以这样定义:
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
在我猜您发布确认对话框的地方,您可以检查CloseReason参数,如果是关机导致了该对话框,则不发布该对话框:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
//do not show the dialog
}
}
SystemEvents可以帮助您。当用户试图注销或关闭系统时,会发生SessionEnding
Microsoft.Win32.SystemEvents.SessionEnding += (sender, e) => DoYourJob();
非常感谢你。这对我帮助很大!同上,对我的情况很有用-为缺少验证的应用程序提供一个“替换”UI,并且电脑被锁定,如果你关闭它,你就无法重新启动应用程序。