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í.
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.