SystemEvents.SessionEnding Händelse
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Inträffar när användaren försöker logga ut eller stänga av systemet.
public:
static event Microsoft::Win32::SessionEndingEventHandler ^ SessionEnding;
public static event Microsoft.Win32.SessionEndingEventHandler? SessionEnding;
public static event Microsoft.Win32.SessionEndingEventHandler SessionEnding;
member this.SessionEnding : Microsoft.Win32.SessionEndingEventHandler
Public Shared Custom Event SessionEnding As SessionEndingEventHandler
Händelsetyp
Undantag
Meddelanden om systemhändelser stöds inte i den aktuella kontexten. Serverprocesser kanske till exempel inte stöder meddelanden om globala systemhändelser.
Försöket att skapa en systemhändelsefönstertråd lyckades inte.
Kommentarer
Det här är en avbruten händelse. Om du anger egenskapen Cancel till true begär du att sessionen fortsätter att köras. Det ger ingen garanti för att sessionen inte avslutas.
Om du använder SessionEnding i ett Windows formulär för att identifiera en systemloggning eller omstart finns det inget deterministiskt sätt att avgöra om händelsen Closing utlöses före den här händelsen.
Om du vill utföra vissa särskilda uppgifter innan Closing utlöses måste du se till att SessionEnding utlöses före Closing. För att göra detta måste du fånga WM_QUERYENDSESSION i formuläret genom att WndProc åsidosätta funktionen. Det här exemplet visar hur du gör detta.
Private Shared WM_QUERYENDSESSION As Integer = &H11
Private Shared systemShutdown As Boolean = False
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_QUERYENDSESSION Then
MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot")
systemShutdown = True
End If
' If this is WM_QUERYENDSESSION, the closing event should be raised in the base WndProc.
MyBase.WndProc(m)
End Sub 'WndProc
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If (systemShutdown) Then
' Reset the variable because the user might cancel the shutdown.
systemShutdown = False
If (System.Windows.Forms.DialogResult.Yes = _
MessageBox.Show("My application", "Do you want to save your work before logging off?", MessageBoxButtons.YesNo)) Then
e.Cancel = True
Else
e.Cancel = False
End If
End If
End Sub
private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg==WM_QUERYENDSESSION)
{
MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
systemShutdown = true;
}
// If this is WM_QUERYENDSESSION, the closing event should be
// raised in the base WndProc.
base.WndProc(ref m);
} //WndProc
private void Form1_Closing(
System.Object sender,
System.ComponentModel.CancelEventArgs e)
{
if (systemShutdown)
// Reset the variable because the user might cancel the
// shutdown.
{
systemShutdown = false;
if (DialogResult.Yes==MessageBox.Show("My application",
"Do you want to save your work before logging off?",
MessageBoxButtons.YesNo))
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
}
Important
Konsolprogram genererar inte händelsen SessionEnding .
Note
Den här händelsen utlöses endast om meddelandepumpen körs. I en Windows tjänst, såvida inte ett dolt formulär används eller meddelandepumpen har startats manuellt, utlöses inte den här händelsen. Ett kodexempel som visar hur du hanterar systemhändelser med hjälp av ett dolt formulär i en Windows-tjänst finns i klassen SystemEvents.
Caution
Eftersom det här är en statisk händelse måste du koppla från händelsehanterarna när programmet tas bort, annars resulterar minnesläckor.