SystemEvents.SessionEnding Zdarzenie

Definicja

Występuje, gdy użytkownik próbuje wylogować się lub zamknąć system.

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 

Typ zdarzenia

Wyjątki

Powiadomienia o zdarzeniach systemowych nie są obsługiwane w bieżącym kontekście. Na przykład procesy serwera mogą nie obsługiwać globalnych powiadomień o zdarzeniach systemowych.

Próba utworzenia wątku okna zdarzeń systemowych nie powiodła się.

Uwagi

Jest to zdarzenie, które można anulować. Cancel Ustawienie właściwości true na wartość spowoduje żądanie, że sesja będzie nadal działać. Nie zapewnia żadnej gwarancji, że sesja nie zakończy się.

Jeśli używasz SessionEnding w formularzu systemu Windows do wykrywania wylogowania lub ponownego uruchamiania systemu, nie ma deterministycznego sposobu decydowania, czy Closing zdarzenie zostanie uruchomione przed tym zdarzeniem.

Jeśli chcesz wykonać kilka specjalnych zadań przed Closing wyzwoleniem, musisz upewnić się, że SessionEnding działa przed Closing. Aby to zrobić, należy wychwytować WM_QUERYENDSESSION w formularzu przez zastąpienie WndProc funkcji. W tym przykładzie pokazano, jak to zrobić.

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;  
        }  
    }  
}  

Ważne

Aplikacje konsolowe nie zgłaszają zdarzenia SessionEnding .

Uwaga

To zdarzenie jest zgłaszane tylko wtedy, gdy pompa komunikatów jest uruchomiona. W usłudze systemu Windows, chyba że zostanie użyty ukryty formularz lub pompa komunikatów została uruchomiona ręcznie, to zdarzenie nie zostanie podniesione. Aby zapoznać się z przykładem kodu pokazującym sposób obsługi zdarzeń systemowych przy użyciu ukrytego formularza w usłudze systemu Windows, zobacz klasę SystemEvents .

Przestroga

Ponieważ jest to zdarzenie statyczne, należy odłączyć programy obsługi zdarzeń, gdy aplikacja zostanie usunięta, lub wystąpią przecieki pamięci.

Dotyczy

Zobacz też