SystemEvents.SessionEnding not firing
本文关键字:firing not SessionEnding SystemEvents | 更新日期: 2023-09-27 18:10:48
我正在c# .net 4.0中开发一个windows窗体应用程序。我想捕获windows下线事件。
代码如下:
public Form1()
{
InitializeComponent();
SystemEvents.SessionEnding += (s, e) =>
{
if (e.Reason == SessionEndReasons.Logoff)
{
MessageBox.Show("LogOff");
}
else if (e.Reason == SessionEndReasons.SystemShutdown)
{
MessageBox.Show("ShutDown");
}
};
}
为什么我的sessionEnding没有被触发?
- 这取决于gpedit.msc上的配置。
gpedit开放。在"计算机配置>管理模板>系统>关机选项"中选择"关闭自动终止阻止或取消关机的应用程序"。因为我的笔记本电脑配置为自动关机,所以它永远不会触发会话结束
-
也许您可以将上面的代码移动到其窗口的入口点(在主程序中)。
-
也许你可以重写windows消息。你可以在MSDN库文档中看到它。http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.sessionending.aspx
-
关闭消息泵已被其他软件重新路由,而不是重新路由到您的应用程序
这可能对某人有用。
如果包含表单关闭事件
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
那么SessionEnding将不会被触发,我刚刚遇到这个问题并纠正了它
void SystemEvents_SessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
{}
这里我需要防止Alt+F4命令关闭表单,所以我添加了这个表单关闭事件,这导致了这个问题。因此,我们可以将会话结束事件集成到窗体关闭事件中。选项2引用自stackoverflow答案