Ricevi un Log off evento dal sistema
Domanda
io sto facendo un programma che viene utilizzato per cancellare i file temporanei, cronologia, ecc, quando l'utente si disconnette. Così come posso sapere se il sistema sta per disconnessione (in C #)?
Soluzione
C'è una proprietà in Ambiente di classe che racconta se processo di arresto è stato avviato:
Environment.HasShutDownStarted
Ma dopo un po 'googling ho scoperto che questo può essere di aiuto a voi:
using Microsoft.Win32;
//during init of your application bind to this event
SystemEvents.SessionEnding +=
new SessionEndingEventHandler(SystemEvents_SessionEnding);
void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
if (Environment.HasShutdownStarted)
{
//Tackle Shutdown
}
else
{
//Tackle log off
}
}
Ma se si desidera cancellare solo file temporaneo, allora penso che la distinzione tra lo spegnimento o disconnettersi non è di alcuna conseguenza per voi.
Altri suggerimenti
Se avete bisogno di specificamente l'evento di log-off, è possibile modificare il codice fornito nella risposta di TheVillageIdiot come segue:
using Microsoft.Win32;
//during init of your application bind to this event
SystemEvents.SessionEnding +=
new SessionEndingEventHandler(SystemEvents_SessionEnding);
void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
if (e.Reason == SessionEndReasons.Logoff)
{
// insert your code here
}
}
Se si dispone di un Windows Form , è possibile gestire l'evento FormClosing
, quindi controllare il valore e.CloseReason
enum per determinare se è uguale a CloseReason.WindowsShutDown
.
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
// Your code here
}
}