Pregunta

He escrito una aplicación C# Windows Forms, no un servicio (solo se usa cuando el usuario se inicia sesión y tiene una interfaz gráfica de usuario) que tiene un hilo de fondo que se ejecuta en un bucle infinito.

Sin embargo, cuando intento cerrar Windows (7), me dice que el programa está evitando que se apagara o lo cierre y me pregunta si quiero forzar un apagado.

Ahora, ¿hay alguna posibilidad de que mi programa se diera cuenta (obtenga un controlador) de Windows tratando de dejarlo o iniciar sesión?

Entonces, lo que necesito es hacer que la aplicación se dé cuenta cuando Windows intenta dejar de fumar.

Gracias por adelantado.

Editar: ¡Gracias por el gran consejo! ¿Es posible de alguna manera usar la idea con el evento de cierre de formulario si tiene un controlador de eventos de cancelación?

¿Fue útil?

Solución

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
    }
}

Otros consejos

Llamas a ese hilo un "hilo de fondo" pero tiene IsBackground = true; ?
El sistema solo detendrá un hilo que lo hace.

pienso Captura de la salida de la consola C# También debe ser utilizable en su escenario.

Aparte de eso, tal vez sea suficiente para configurar su hilo como hilo de fondo?

Echa un vistazo al Microsoft.win32.SystemEvents.Sessionending evento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top