reinicies que proceso impide esta equipo aplicacion apague c# winforms shutdown

c# - proceso - g esta aplicacion impide que reinicies



Forzar el cierre de la aplicaciĆ³n al apagar el sistema (5)

En el controlador de eventos de cierre, que puede definir así:

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);

y donde supongo que está publicando su cuadro de diálogo de confirmación, puede verificar el argumento CloseReason y no publicar el cuadro de diálogo si es el cierre el que lo causa:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.WindowsShutDown) { //do not show the dialog } }

Tengo una aplicación de Windows Forms que, cuando se cierra la ventana principal, muestra un cuadro de diálogo básico que confirma la acción. Si el usuario decide cancelar la aplicación, se cancela la salida.

Sin embargo, cuando la aplicación se ejecuta minimizada y el usuario desea apagar la PC, la secuencia de apagado se detiene porque mi aplicación está esperando que el usuario confirme el cierre de la aplicación (se muestra el cuadro de diálogo).

Pensé en agregar un temporizador para hacer que se agote el tiempo de espera y, si no llega ninguna respuesta en un período de tiempo determinado, cierre la aplicación automáticamente, pero incluso si esta es una forma de hacerlo, NO es como lo hacen las demás aplicaciones.

Entonces, ¿cuál sería una solución óptima para confirmar el cierre de la aplicación en cualquier otro caso, a menos que el sistema se apague?

¡Gracias!


Puede escuchar el evento de apagado y salir de la aplicación sin un cuadro de mensaje.


SystemEvents puede ayudarte. El SessionEnding ocurre cuando el usuario está intentando cerrar sesión o apagar el sistema.

Microsoft.Win32.SystemEvents.SessionEnding += (sender, e) => DoYourJob();



En su evento FormClosing, verifique la propiedad FormClosingEventArgs de CloseReason para ver por qué la ventana se está cerrando. Si es CloseReason.WindowsShutDown , no muestre su diálogo y no cancele el cierre de su formulario.

private void MyForm_FormClosing(object sender, FormClosingEventArgs e) { // Verify that we''re not being closed because windows is shutting down. if (e.CloseReason != CloseReason.WindowsShutDown) { // Show your dialog / cancel closing. } }

NB: Es posible que también desee incluir CloseReason.TaskManagerClosing ya que el usuario claramente desea cerrar su aplicación en ese escenario y el administrador de tareas ya solicita confirmación. O alternativamente, solo muestre su diálogo para CloseReason.UserClosing .