在关机前关闭程序
本文关键字:关闭程序 关机 | 更新日期: 2023-09-27 18:11:53
我在为一家公司写程序,我为供应商写程序。不幸的是,一位IT经理看到,员工在关闭电脑之前不会关闭这个程序,他对我说,你的应用程序必须在关闭之前关闭自己。我告诉他,这不是问题,窗口关闭了这个程序,但他说我不想看到(windows[等待后台程序关闭的窗口])。
之后,我发现这个代码:
static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
switch (e.Reason)
{
case SessionEndReasons.Logoff:
Application.Exit();
break;
case SessionEndReasons.SystemShutdown:
Application.Exit();
break;
}
}
然后添加到Form_Load:
SystemEvents.SessionEnding += SystemEvents_SessionEnding;
如果你在Application.Exit()之前写一个消息框,它显示它没有问题,但是,它不工作,我可以看到(窗口等待后台程序关闭)再次。
为什么? !我的代码有问题吗?!还有别的办法吗?
谢谢
正如这篇文章所说,c#中是否有一种方法可以检测Windows关闭/注销并取消该操作(在询问用户之后),似乎无法暂停超时问题。
也许你可以试试MSDN SessionEnding:
中的例子private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg==WM_QUERYENDSESSION)
{
MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
systemShutdown = true;
}
// If this is WM_QUERYENDSESSION, the closing event should be
// raised in the base WndProc.
base.WndProc(ref m);
} //WndProc
private void Form1_Closing(
System.Object sender,
System.ComponentModel.CancelEventArgs e)
{
if (systemShutdown)
// Reset the variable because the user might cancel the
// shutdown.
{
systemShutdown = false;
if (DialogResult.Yes==MessageBox.Show("My application",
"Do you want to save your work before logging off?",
MessageBoxButtons.YesNo))
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
}
Windows Vista的关机更改可能会提供有关关机超时的更多信息
Try Environment.Exit(0);而不是Application.Exit();