Приложение C # для Windows не позволяет Windows выключаться / выходить из системы - PullRequest
4 голосов
/ 23 марта 2010

Я написал приложение C # для Windows Forms, а не службу (она используется только тогда, когда пользователь вошел в систему и имеет графический интерфейс пользователя), в которой фоновый поток работает в бесконечном цикле.

Однако, когда я пытаюсь завершить работу Windows (7), она сообщает, что программа не позволяет ему выключиться или выходить из системы, и спрашивает, хочу ли я принудительно завершить работу.

Теперь, есть ли возможность для моей программы узнать (получить обработчик) Windows, пытающуюся закрыть ее или выйти из системы?

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

Заранее спасибо.

РЕДАКТИРОВАТЬ: Спасибо за отличный совет! Можно ли каким-либо образом использовать идею с событием закрытия формы, если у него есть обработчик события CANCEL?

Ответы [ 4 ]

10 голосов
/ 23 марта 2010
public Form1()
{
    InitializeComponent();

    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // Or any of the other reasons suitable for what you want to accomplish
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        //Stop your infinite loop
    }
}
5 голосов
/ 23 марта 2010

Вы называете этот поток "фоновым потоком", но имеет ли он IsBackground = true;?
Система остановит только поток, который это делает.

2 голосов
/ 23 марта 2010

Я думаю, Выход консоли захвата C # также должен использоваться в вашем сценарии.

Кроме этого, может быть, достаточно настроить ваш поток как фоновый поток

1 голос
/ 23 марта 2010

Посмотрите на событие Microsoft.Win32.SystemEvents.SessionEnding .

...