2016-05-12 3 views
0

ich auf einer WPF-Anwendung arbeite, die ihre Fenster Zustand (normal/minimiert) gespeichert werden sollten - auch wenn das System heruntergefahren oder loggin ab.Speicher Window und es wieder nach einem Neustart/Relogin

Das WindowClosing-Ereignis wird zum Speichern des Status verwendet. Das Problem besteht darin, dass das Herunterfahren/Abmelden das Schließen des Fensters erzwingt. Daher wird der Fensterstatus immer nach dem Neustart minimiert.

  • Gibt es eine sichere Möglichkeit zu überprüfen, ob das System heruntergefahren wird? (Ich versuchte Environment.HasShutdownStarted, aber ID arbeitete nicht).
  • Gibt es eine Möglichkeit, über andere Fensterstatusänderungen als das WindowClosing-Ereignis benachrichtigt zu werden?

[Bearbeiten] Die Antworten der Frage, wie dublicate markiert sind, sind nicht befriedigend:

  • SystemEvents.SessionEnding ist keine richtige Lösung, weil die msdn sagt: „Wenn Sie Sessionen in ein verwenden Windows-Formular, um eine Systemabmeldung oder einen Neustart zu erkennen, gibt es keine deterministische Möglichkeit zu entscheiden, ob das Closing-Ereignis vor diesem Ereignis ausgelöst wird. "

  • GetSystemMetrics(SM_SHUTTINGDOWN) kann funktionieren (ich habe es nicht getestet), aber es erfordert PInvoke und ich bevorzuge eine verwaltete Lösung.

  • Endlich ist der Vorschlag von d.moncada (mit dem Application.SessionEnding Ereignis) die beste Lösung für mein Problem.

Antwort

1

Gibt es einen sicheren Weg, um zu überprüfen, ob das System heruntergefahren wird? (Ich versuchte Environment.HasShutdownStarted, aber ID arbeitete nicht).

Möchten Sie wissen, wann das System (Computer) heruntergefahren ist, oder die Anwendung?

Wenn es die Anwendung ist, können Sie Window.Closing Ereignis verwenden.

Siehe here.

Wenn es für das System ist, können Sie auf das Application.SessionEnding Ereignis zu hören.

Siehe here.

Gibt es eine Möglichkeit, über andere Fensterstatusänderungen als das WindowClosing-Ereignis benachrichtigt zu werden?

Haben Sie sich das StateChanged Ereignis der Window angesehen?

Weitere Informationen finden Sie here

+0

Ja, und während der Abschaltung der Maschine wird mit staatlichen Minimierte als OP gefeuert mehr oder weniger anzeigt. – CodeCaster

+1

Danke, Application.SessionEnding ist ein ordnungsgemäßes Ereignis, das verwendet werden kann, um anzugeben, ob Windows heruntergefahren wird. – JanDotNet

Verwandte Themen