2016-05-12 180 views
0

我正在處理應存儲其窗口狀態(正常/最小化)的WPF應用程序 - 即使系統正在關閉或登錄。保存WindowState並在重新啓動/重新登錄後恢復

WindowClosing事件用於存儲狀態。問題是,shutdown/log off會強制關閉窗口。因此,重新啓動後窗口狀態總是最小化。

  • 有沒有安全的方法來檢查系統是否正在關閉? (我試過Environment.HasShutdownStarted,但id沒有工作)。
  • 有沒有辦法獲得有關WindowClosing事件以外的窗口狀態更改的通知?

[編輯] 問題,標記爲dublicate的答案,都沒有滿足:

  • SystemEvents.SessionEnding是不是一個合適的解決方案,因爲msdn說:「如果你在使用SessionEnding Windows窗體檢測系統註銷或重新啓動,沒有確定性的方式來決定關閉事件是否會在此事件之前觸發。「

  • GetSystemMetrics(SM_SHUTTINGDOWN)可能工作(我沒有測試它),但它需要PInvoke,我更喜歡託管的解決方案。

  • 因此最後,d.moncada的建議(使用Application.SessionEnding事件)是我的問題的最佳解決方案。

回答

1

有沒有檢查系統正在關閉一個安全的方式? (我試過 Environment.HasShutdownStarted,但id沒有工作)。

您是否想知道系統(計算機)何時關閉或應用程序?

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

請參閱here

如果是系統,您可以收聽Application.SessionEnding事件。

請參閱here

有沒有辦法獲得有關WindowClosing事件以外的窗口狀態變化的通知?

你看過WindowStateChanged事件嗎?

更多信息,請參閱here

+0

是的,機器關閉時,它以最小的爲OP或多或少指示狀態解僱。 – CodeCaster

+1

謝謝,Application.SessionEnding是一個適當的事件,可用於指示Windows是否正在關閉。 – JanDotNet

相關問題