保存WindowState并在reboot / relogin

时间:2016-05-12 14:25:37

标签: c# wpf windows system-shutdown

我正在开发一个应该存储其窗口状态(正常/最小化)的WPF应用程序 - 即使系统正在关闭或注销。

WindowClosing事件用于存储状态。问题是,关闭/注销会强制关闭窗口。因此,重启后窗口状态始终最小化。

  • 有没有一种安全的方法来检查系统是否正在关闭? (我尝试了Environment.HasShutdownStarted,但是ID没有用。)
  • 除了WindowClosing事件之外,有没有办法获得有关窗口状态更改的通知?

[编辑] 这个被标记为dublicate的问题的答案并不令人满意:

  • SystemEvents.SessionEnding不是正确的解决方案,因为msdn说:“如果您在Windows窗体中使用SessionEnding来检测系统注销或重新启动,则没有确定的方法来决定Closing事件是否会在此事件之前触发。“

  • GetSystemMetrics(SM_SHUTTINGDOWN)可能有用(我没有测试过),但它需要PInvoke,我更喜欢托管解决方案。

  • 最后,来自d.moncada的建议(使用Application.SessionEnding事件)是我问题的最佳解决方案。

1 个答案:

答案 0 :(得分:1)

  

有没有一种安全的方法来检查系统是否正在关闭? (我试过了   Environment.HasShutdownStarted,但是id没有用。)

您想知道系统(计算机)何时关闭,还是应用程序?

如果是应用程序,您可以使用Window.Closing事件。

请参阅here

如果是系统,则可以收听Application.SessionEnding事件。

请参阅here

  

是否有办法获得有关窗口状态更改的通知   WindowClosing事件?

您是否看过StateChanged的{​​{1}}事件?

更多信息,请参阅here