Получение бесформенной программы на C # для закрытия себя во время выключения / перезапуска? - PullRequest
1 голос
/ 17 сентября 2010

Я пишу программу, которая вообще не создает форм, пока она не понадобится.Проблема в том, что он предотвращает автоматическое выключение.Я видел обсуждения о добавлении if для формирования закрывающих событий, чтобы проверить, происходит ли это из-за закрытия, но, как я уже сказал, моя программа вообще не имеет форм до тех пор, пока она не потребуется.

Есть ли какое-либо событие или какой-либо другой метод, который позволит мне узнать, когда моя программа должна закрываться, чтобы Windows автоматически отключалась? И это не многопоточность .

Ответы [ 3 ]

4 голосов
/ 17 сентября 2010

Вы можете использовать класс SystemEvents, чтобы "прослушивать" пользователей, выходящих из системы или завершающих работу.

Если я правильно понимаю документацию (и глубокое изучение с помощью Reflector подтверждает это):

  • Системные события создадут новый поток, который получает сообщения из окон (у него есть свой собственный насос).
  • При получении события ваш код будет вызываться из нового потока. Вы должны знать об этом.
1 голос
/ 17 сентября 2010

Обработка события Microsoft.Win32.SystemEvents.SessionEnding и проверка фактического завершения работы с System.Environment.HasShutdownStarted

1 голос
/ 17 сентября 2010

Вы всегда можете добавить пустую форму, которую вы открываете в свернутом виде, без значка на панели задач - это не окажет никакого визуального воздействия, но будет отправлено событие закрытия формы - где вы могли бы отметить событие завершения работы и, предположительно, выключите / остановите все, что еще делает ваше приложение.

...