2010-03-23 7 views
4

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

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

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

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

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

EDIT: Спасибо за отличный совет! Можно ли каким-либо образом использовать идею с событием закрытия формы, если у нее есть обработчик события CANCEL?

+1

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

ответ

10
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 
    } 
} 
+0

Спасибо. Это действительно помогло мне. Я удалил обработчик отмены и использовал этот способ, только если это Windows, которая закрывает приложение, которое оно завершает. – arik

2

Я думаю, что Capture console exit C# должен также использоваться в вашем сценарии.

Кроме того, может быть, достаточно установить свою нить как background thread?

5

Вы называете эту нить «фоновым потоком», но имеет ли она IsBackground = true;?
Система остановит только поток.

+0

+1 - Это была моя мысль. –