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 #)?

È stato utile?

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

È possibile utilizzare WMI e guardare il Win32_ComputerShutdownEvent dove tipo è uguale a 0. È possibile trovare ulteriori informazioni su questo evento qui , e più sull'utilizzo di WMI in .NET qui .

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
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top