SystemEvents.SessionEnding Événement
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Se produit lorsque l'utilisateur essaie de fermer une session ou d'arrêter le système.
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
Type d'événement
Exceptions
Les notifications d'événements système ne sont pas prises en compte dans le contexte actuel. Les processus serveur, par exemple, risquent de ne pas prendre en charge les notifications d'événements système globaux.
La tentative de création d'un thread de fenêtre des événements système a échoué.
Remarques
Cet événement peut être annulé. La définition de la Cancel propriété sur true
demande que la session continue à s’exécuter. Il n’offre aucune garantie que la session ne se terminera pas.
Si vous utilisez SessionEnding dans un formulaire Windows pour détecter une fermeture de session ou un redémarrage du système, il n’existe aucun moyen déterministe de décider si l’événement Closing se déclenchera avant cet événement.
Si vous souhaitez effectuer des tâches spéciales avant Closing le déclenchement, vous devez vous assurer que SessionEnding se déclenche avant Closing. Pour ce faire, vous devez intercepter le WM_QUERYENDSESSION
dans le formulaire en remplaçant la WndProc
fonction . Cet exemple montre comment procéder.
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
Les applications console ne déclenchent pas l’événement SessionEnding .
Notes
Cet événement est déclenché uniquement si la pompe de messages est en cours d’exécution. Dans un service Windows, sauf si un formulaire masqué est utilisé ou que la pompe de messages a été démarrée manuellement, cet événement n’est pas déclenché. Pour obtenir un exemple de code qui montre comment gérer les événements système à l’aide d’un formulaire masqué dans un service Windows, consultez la SystemEvents classe .
Attention
S'agissant d'un événement statique, vous devez détacher vos gestionnaires d’événements lorsque votre application est supprimée, faute de quoi des fuites mémoire vont se produire.