SystemEvents.SessionEnding Gebeurtenis
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Treedt op wanneer de gebruiker zich probeert af te melden of het systeem af te sluiten.
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
Gebeurtenistype
Uitzonderingen
Systeem gebeurtenismeldingen worden niet ondersteund onder de huidige context. Serverprocessen bieden bijvoorbeeld mogelijk geen ondersteuning voor meldingen van globale systeemevenementen.
De poging om een vensterthread voor systeem gebeurtenissen te maken, is niet geslaagd.
Opmerkingen
Dit is een gebeurtenis die kan worden geannuleerd. Als u de Cancel eigenschap instelt, wordt u verzocht true om de sessie uit te voeren. Het biedt geen garantie dat de sessie niet wordt beëindigd.
Als u SessionEnding gebruikt in een Windows formulier om een systeemaanmelding te detecteren of opnieuw op te starten, is er geen deterministische manier om te bepalen of de gebeurtenis Closing wordt geactiveerd vóór deze gebeurtenis.
Als u een aantal speciale taken wilt uitvoeren voordat Closing wordt geactiveerd, moet u ervoor zorgen dat SessionEnding er eerder Closingbrandt. Hiervoor moet u de WM_QUERYENDSESSION vorm onderschekken door de WndProc functie te overschrijven. In dit voorbeeld ziet u hoe u dit doet.
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
Consoletoepassingen genereren de SessionEnding gebeurtenis niet.
Note
Deze gebeurtenis wordt alleen gegenereerd als de berichtpomp wordt uitgevoerd. In een Windows service, tenzij er een verborgen formulier wordt gebruikt of de berichtpomp handmatig is gestart, wordt deze gebeurtenis niet gegenereerd. Zie de klasse SystemEvents voor een codevoorbeeld waarin wordt getoond hoe u systeem gebeurtenissen verwerkt met behulp van een verborgen formulier in een Windows-service.
Caution
Omdat dit een statische gebeurtenis is, moet u de gebeurtenis-handlers loskoppelen wanneer uw toepassing wordt verwijderd, of er geheugenlekken optreden.