Freigeben über


SystemEvents.SessionEnding-Ereignis

Tritt ein, wenn ein Benutzer versucht, sich abzumelden oder das System herunterzufahren.

Namespace: Microsoft.Win32
Assembly: System (in system.dll)

Syntax

'Declaration
Public Shared Event SessionEnding As SessionEndingEventHandler
'Usage
Dim handler As SessionEndingEventHandler

AddHandler SystemEvents.SessionEnding, handler
public static event SessionEndingEventHandler SessionEnding
public:
static event SessionEndingEventHandler^ SessionEnding {
    void add (SessionEndingEventHandler^ value);
    void remove (SessionEndingEventHandler^ value);
}
/** @event */
public static void add_SessionEnding (SessionEndingEventHandler value)

/** @event */
public static void remove_SessionEnding (SessionEndingEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.

Ausnahmen

Ausnahmetyp Bedingung

InvalidOperationException

Systemereignisbenachrichtigungen werden unter dem aktuellen Kontext nicht unterstützt. Beispielsweise unterstützen Serverprozesse möglicherweise keine globalen Systemereignisbenachrichtigungen.

ExternalException

Beim Versuch, einen Thread für das Systemereignisfenster zu erstellen, ist ein Fehler aufgetreten.

Hinweise

Ein Abbrechen dieses Ereignisses ist möglich. Durch Festlegen der Cancel-Eigenschaft auf false wird die Fortsetzung der Sitzung angefordert. Dies garantiert jedoch nicht, dass die Sitzung nicht beendet wird.

Wenn Sie SessionEnding in einem Windows-Formular verwenden, um eine Systemabmeldung oder einen Neustart zu erkennen, besteht keine Möglichkeit, mit der deterministisch festgestellt werden kann, ob das Closing-Ereignis vor diesem Ereignis ausgelöst wird.

Wenn bestimmte Tasks vor dem Auslösen von Closing ausgeführt werden sollen, müssen Sie sicherstellen, dass SessionEnding vor Closing ausgelöst wird. Zu diesem Zweck müssen Sie WM_QUERYENDSESSION im Formular abfangen, indem Sie die WndProc-Funktion überschreiben.

Wichtig

Konsolenanwendungen lösen das SessionEnding-Ereignis nicht aus.

Warnung

Da es sich um ein statisches Ereignis handelt, müssen Sie beim Freigeben der Anwendung die Anbindung der Ereignishandler trennen. Andernfalls treten Speicherverluste auf.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie WM_QUERYENDSESSION im Formular durch deterministisches Überschreiben der WndProc-Funktion abgefangen wird.

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

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

SystemEvents-Klasse
SystemEvents-Member
Microsoft.Win32-Namespace
SessionEndingEventArgs-Klasse
SessionEndingEventHandler-Delegat
SessionEndReasons-Enumeration