SystemEvents.SessionEnding Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.