Sdílet prostřednictvím


SystemEvents.SessionEnding Událost

Definice

Vyvolá se, 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. Serverové procesy například nemusí podporovat globální oznámení systémových událostí.

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

Poznámky

Tato událost se dá zrušit. Pokud vlastnost nastavíte Cancel na , true bude se požadovat, aby relace běžela dál. Neposkytuje žádnou záruku, že relace nebude ukončena.

Pokud používáte SessionEnding ve formuláři Systému Windows ke zjištění odhlášení nebo restartování systému, neexistuje žádný deterministický způsob, jak rozhodnout, zda Closing se událost aktivuje před touto událostí.

Pokud chcete před Closing spuštěním provést některé speciální úlohy, musíte zajistit, aby SessionEnding se aktivovala před Closingspuštěním . Chcete-li to provést, musíte ve formuláři vytvořit depeší WM_QUERYENDSESSION přepsáním WndProc funkce. Tento příklad ukazuje, jak to udělat.

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 nevyvolá událost SessionEnding .

Poznámka

Tato událost je vyvolána pouze v případě, že je spuštěné čerpadlo zpráv. Ve službě systému Windows nebude tato událost vyvolána, pokud není použit skrytý formulář nebo pokud není ručně spuštěna pumpa zpráv. Příklad kódu, který ukazuje, jak zpracovávat systémové události pomocí skrytého formuláře ve službě systému Windows, najdete ve SystemEvents třídě .

Upozornění

Protože se jedná o statickou událost, musíte při odstranění aplikace odpojit obslužné rutiny událostí, jinak dojde k nevracení paměti.

Platí pro

Viz také