programming app c# desktop-application uwp

c# - programming - desktop app converter



UWP en el escritorio cerrado por la parte superior Botón X-sin evento (2)

Una aplicación UWP que se ejecuta en el escritorio se puede cerrar desde el botón X superior, pero no tiene ningún evento. Se sabe que en los teléfonos y las tabletas, una aplicación debe confiar en el evento de suspensión, sin importar cómo se active y luego la aplicación debe confiar en ApplicationExecutionState .

Sin embargo, aquí hay un escenario (quizás) común: en los teléfonos, el evento de Suspending suficiente y en caso de que se produzca una llamada de VoIP, será operado por el SO después de que se suspenda la aplicación. En el escritorio, el usuario espera cerrar el botón de cerrar por completo la aplicación. Por lo tanto, si hay una llamada en curso, se debe colgar y se deben liberar ciertos recursos.

¿Cómo puedo saber cuándo el usuario hizo clic en el botón "Cerrar" si (y solo si) la aplicación UWP se está ejecutando en el escritorio?


De la página oficial sobre el ciclo de vida de la aplicación:

No hay ningún evento especial para indicar que el usuario cerró la aplicación.

Comportamiento cerrado por usuario: si su aplicación necesita hacer algo diferente cuando el usuario la cierra que cuando la cierra Windows, puede usar el controlador de eventos de activación para determinar si la aplicación fue cancelada por el usuario o por Windows .

Por lo tanto, según esto, no hay una forma (clara) de saber si el usuario cerró la aplicación antes de que se cierre la aplicación, sino solo después de que se haya reiniciado. Demasiado.


Eliminé mi respuesta original con el evento Window.Current.Closed porque parece que no funciona si solo tienes una instancia de Windows. También hay CoreApplication.Exiting , pero a juzgar por este tema tampoco funciona. Parece ser un problema conocido que podría corregirse en el futuro. Al final, parece que no hay una forma clara de determinar cuándo se cierra la aplicación, solo cuando se suspende.

Sin embargo, Window.Current evento VisibilityChanged cuando se cierra la aplicación. El problema es que también se dispara cuando la aplicación se minimiza y tal vez en otros casos. Pero creo que, en combinación con Suspending , puede (más o menos) determinar de forma segura que la aplicación de escritorio se está cerrando. Lo bueno es que VisibilityChanged activó antes de Suspending y puede guardar su valor y verificarlo en el controlador OnSuspending , después de lo cual decide si necesita realizar alguna limpieza u otro trabajo.