Frage

Ich habe eine C# Windows Forms -Anwendung geschrieben, nicht einen Dienst (er wird nur verwendet, wenn der Benutzer angemeldet ist und über eine grafische Benutzeroberfläche verfügt), in der ein Hintergrund -Thread in einer unendlichen Schleife ausgeführt wird.

Wenn ich versuche, Fenster abzuschalten (7), wird mir jedoch angegeben, dass das Programm verhindert, dass es abgeschaltet oder abmeldet, und fragt mich, ob ich eine Abschaltung erzwingen möchte.

Gibt es nun eine Möglichkeit, dass mein Programm sich bewusst wird (einen Handler) von Windows, die versuchen, es zu beenden oder sich abzuzeichnen?

Ich brauche also die Anwendung zu erkennen, wenn Windows versucht, aufzuhören.

Danke im Voraus.

EDIT: Danke für den tollen Rat! Ist es in irgendeiner Weise möglich, die Idee mit dem Formular Schließereignis zu verwenden, wenn es über einen Cancer -Event -Handler verfügt?

War es hilfreich?

Lösung

public Form1()
{
    InitializeComponent();

    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // Or any of the other reasons suitable for what you want to accomplish
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        //Stop your infinite loop
    }
}

Andere Tipps

Sie nennen diesen Thread einen "Hintergrund -Thread", aber hat er ihn IsBackground = true; ?
Das System stoppt nur einen Thread, der es tut.

Ich finde Capture Console Exit C# erfassen sollte auch in Ihrem Szenario verwendet werden.

Abgesehen davon reicht es vielleicht aus, Ihren Thread als einzurichten Hintergrundfaden?

Schauen Sie sich das an die Microsoft.win32.Systemevents.Sessionend Veranstaltung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top