Sdílet prostřednictvím


SystemEvents.SessionEnding Událost

Definice

Nastane, když se uživatel pokouší odhlásit nebo vypnout systém.

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 

Event Type

Výjimky

Oznámení systémových událostí nejsou v aktuálním kontextu podporována. Procesy serveru například nemusí podporovat oznámení globálních systémových událostí.

Pokus o vytvoření vlákna okna systémových událostí nebyl úspěšný.

Poznámky

Jedná se o událost, která se dá zrušit. Cancel Nastavení vlastnosti bude true vyžadovat, aby relace pokračovala ve spuštění. Neposkytuje žádnou záruku, že relace nebude ukončena.

Pokud používáte SessionEnding ve formuláři Windows k detekci systémového logffu nebo restartování, neexistuje deterministický způsob, jak rozhodnout, jestli Closing se událost aktivuje před touto událostí.

Chcete-li před spuštěním provést některé zvláštní úkoly Closing , je třeba zajistit, aby SessionEnding se požáry před Closing. Chcete-li to provést, musíte stisknout WM_QUERYENDSESSION formulář přepsáním WndProc funkce. Tento příklad ukazuje, jak to provést.

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

Důležité

Konzolové aplikace událost nevyvolají SessionEnding .

Poznámka:

Tato událost se vyvolá pouze v případě, že je spuštěné čerpadlo zpráv. Pokud se ve službě Windows nepoužívá skrytý formulář nebo se pumpa zpráv spustila ručně, tato událost nebude vyvolána. Příklad kódu, který ukazuje, jak zpracovávat systémové události pomocí skrytého formuláře ve službě Systému Windows, viz SystemEvents třída.

Upozornění

Vzhledem k tomu, že se jedná o statickou událost, je nutné odpojit obslužné rutiny událostí, když je aplikace uvolněna, nebo bude výsledkem nevracení paměti.

Platí pro

Viz také