我正在为公司编写程序,我为供应商编写了一个程序。 不幸的是,其中一位IT经理看到,员工在关闭计算机之前没有关闭这个程序,他告诉我你的应用程序必须在关闭之前自行关闭。我告诉他,这不是问题,Windows关闭了这个程序,但他说我不想看(Windows [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()之前写了一个消息框,它会毫无问题地显示它,但是它没有工作,我可以看到(窗口等待后台程序关闭)。
为什么?我的代码有问题吗?!还有另一种方式吗?
感谢
答案 0 :(得分:1)
正如这篇文章Is there a way in c# to detect a Windows shutdown/logoff and cancel that action (after asking the user)所说,似乎无法暂停超时问题。
也许您可以尝试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;
}
}
}
Shutdown Changes for Windows Vista可能会为关机超时提供更多信息
答案 1 :(得分:0)
尝试Environment.Exit(0);而不是Application.Exit();