【发布时间】:2014-07-07 00:21:49
【问题描述】:
我正在为一家公司编写程序,我为供应商编写了程序。 不幸的是,其中一位 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() 之前写了一个消息框,它会毫无问题地显示它,但是它不起作用,我可以再次看到(等待后台程序关闭的窗口)。
为什么?!我的代码有什么问题吗?!还有其他方法吗?
谢谢
【问题讨论】:
-
当您“正常”关闭应用程序时,您的应用程序是否会快速关闭 - 还是需要相当长的时间才能关闭(例如活动后台线程)?
-
@BernhardHiller , 它包含关闭前的后台线程
-
后台线程是如何“结束”的——直接杀死它们还是等待它们退出?我想问题在于他们在关机时的处理;一个简单的杀戮可能是合适的。
-
@BernhardHiller 是的,我只是杀了他们。我在 SystemEvents_SessionEnding() 方法中使用了终止进程代码,它不起作用,我认为在终止或关闭我的进程之前... Windows 理解后台进程正在运行,如果我终止此进程,Windows 不理解它已关闭。你觉得怎么样 ?!我说的对吗?