Выберите событие отключения от системы
Вопрос
Я делаю приложение, которое используется для очистки временных файлов, истории и т. Д., Когда пользователь выходит из входа. Итак, как я могу узнать, собирается ли система выйти из системы (в C#)?
Решение
Есть собственность в Окружающая среда класс, который рассказывает о том, начался ли процесс выключения:
Environment.HasShutDownStarted
Но после некоторого поиска я узнал, что это может помочь вам:
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
}
}
Но если вы хотите только очистить Temp File, то я думаю, что различие между выключением или выходом не имеет никакого последствия для вас.
Другие советы
Если вам специально нужно событие отключения, вы можете изменить код, предоставленный в ответе TheVillageIdiot следующим образом:
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
}
}
Если у тебя есть Форма Windows, вы можете справиться FormClosing
событие, затем проверьте e.CloseReason
enum value, чтобы определить, равно ли это CloseReason.WindowsShutDown
.
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
// Your code here
}
}