C# O aplicativo Windows impede o Windows de desligar / fazer login
Pergunta
Eu escrevi um aplicativo C# Windows Forms, não um serviço (ele é usado apenas quando o usuário está conectado e possui uma interface gráfica do usuário) que possui um thread em segundo plano em execução em um loop infinito.
Quando tento desligar o Windows (7), no entanto, ele me diz que o programa está impedindo que ele desligasse ou faça login e me pergunta se eu quero forçar um desligamento.
Agora, existe alguma possibilidade para o meu programa perceber (obter um manipulador) do Windows tentando desistir ou fazer logoff?
Então, o que eu preciso é fazer com que o aplicativo perceba quando o Windows tenta sair.
Desde já, obrigado.
EDIT: Obrigado pelo ótimo conselho! É de alguma forma possível usar a ideia com o evento de fechamento de formulário se tiver um manipulador de eventos Cancel?
Solução
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
}
}
Outras dicas
Você chama esse tópico de "tópico de fundo", mas ele tem IsBackground = true;
?
O sistema apenas interromperá um encadeamento que faz.
Eu penso Capture Console Sair C# Também deve ser utilizável em seu cenário.
Além disso, talvez seja suficiente configurar seu tópico como Tópico de fundo?
Dê uma olhada no Microsoft.win32.systemevents.sessioning evento.