ejemplo - El cierre de diálogo modal WPF finaliza inesperadamente la aplicación
showdialog c# ejemplo (2)
Tengo un problema con mi aplicación que termina inesperadamente cuando un cuadro de diálogo modal, generado a partir de la ventana principal del programa, se cierra normalmente. No se lanzan excepciones no controladas y ninguno de los eventos Closing
o Closed
se activan en la ventana principal de la aplicación.
Básicamente, tengo una ventana principal / shell, que se inicia en el código de la aplicación usando ShellWindow.Show (). A través de un menú, el usuario puede generar un diálogo de apertura personalizado, esta es una nueva ventana creada y luego se muestra usando ShowDialog (el propietario de la ventana se configura con el de la ventana del shell).
Cuando el diálogo se cierra (internamente, mediante un comando que invoca _modalDialogWindow.Close ()) la aplicación se cierra, mientras que yo solo esperaba que el diálogo modal se cerrara.
La depuración del código indica que ShellWindow está abandonado desde la memoria, ya que la siguiente línea de código ejecutada después de _modalDialogWindow.Close () está cayendo fuera de Application.Run () en el código del programa estático.
Si alguien tiene alguna idea, estoy dispuesto a probar cualquier cosa.
Parece que, debido al modo MVVM / Ioc que estoy diseñando, la ventana de la aplicación se propagan más cerca de lo que deberían. ¡No entiendo esto!
Sin embargo, establecer Application.ShutDownMode en explícito evita que la aplicación se cierre prematuramente y ahora tengo el comportamiento deseado.
Por cierto, al activar todas las excepciones según lo sugerido por declyclone, no se generaron excepciones que se lanzan internamente cuando se cierra la ventana.
No cree ninguna ventana antes de crear su aplicación, o no se registrarán correctamente. No se mostrarán en Application.Current.Windows o Application.Current.MainWindow. Luego, cuando crea su ventana de diálogo, su aplicación pensará que es tanto la Ventana Principal como la única ventana.
Ejemplo de lo que no debe hacer:
public partial class App : Application, ISingleInstanceApp
{
MyWindow win = new MyWindow(); //BAD! this is called inside new App(), but before the actual App constructor.
[STAThread]
public static void Main()
{
if (SingleInstance<App>.InitializeAsFirstInstance(Unique))
{
var application = new App();
application.InitializeComponent();
application.Run();
// Allow single instance code to perform cleanup operations
SingleInstance<App>.Cleanup();
}
}
También tuve este problema, tu respuesta me ayudó a descubrir por qué.