Обработка принудительного выхода - PullRequest
0 голосов
/ 05 июля 2010

Есть ли хороший способ обработать принудительный выход в C #?

У меня есть бесформенное приложение на C #, которое общается с LCD через последовательный порт. Когда приложение запущено, единственный способ убить его - использовать диспетчер задач. Проблема в том, что программе нужно выключить ЖК-дисплей, когда она будет готова, и это не выглядит так, как будто мое событие Application.ApplicationExit когда-либо срабатывает в этом состоянии.

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 05 июля 2010

Когда приложение запущено, единственный способ убить его - использовать диспетчер задач.

Моя большая идея состоит в том, чтобы изменить это.

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

Требование к пользователю использовать диспетчер задач для завершения работы вашего приложения кричит о плохом дизайне.

0 голосов
/ 05 июля 2010

Некоторые опции:

  • Напишите отдельный процесс с графическим интерфейсом, который может запускать и останавливать основной процесс. Например, при установке веб-сервера Apache в Windows сам сервер устанавливается как служба. Его можно запускать и останавливать из панели управления системными службами, но он также поставляется с процессом «мониторинга», который находится в области уведомлений, сообщает, работает ли Apache, и позволяет запускать или останавливать его вручную.
  • Если это приемлемо для вашего варианта использования, сделайте приложение консольным приложением. Вы можете зарегистрировать обработчик, когда пользователь нажимает CTRL + C (см. Console.CancelKeyPress), который выполняет очистку перед выходом из процесса. Это по-прежнему не позволит вам справиться с тем, кто убивает процесс из диспетчера задач, но это очень легко сделать и может быть достаточно хорошим в зависимости от вашей ситуации.
0 голосов
/ 05 июля 2010

Напишите код в цикле вашей программы (возможно, с таймером), чтобы прочитать файл или раздел реестра. Например, если файл в C: \ YOURPROGRAM \ CLOSEME содержит текст «closeme», изящно закройте вашу программу. Напишите другую программу, которая пишет этот файл C: \ YOURPROGRAM \ CLOSEME. Поэтому, когда вы хотите закрыть свою программу, не используйте TaskManager, вместо этого откройте вторую программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...