Primero un poco de fondo: tengo una aplicación WPF, que es una interfaz gráfica de usuario para una aplicación heredada de Win32. La aplicación heredada se ejecuta como DLL en un hilo separado. Los comandos que el usuario elige en la interfaz de usuario se invocan en ese "hilo heredado".Application.Current.Shutdown() vs. Application.Current.Dispatcher.BeginInvokeShutdown()
Si el "hilo heredado" finaliza, la GUI-front-end ya no puede hacer nada útil, por lo que debo cerrar la aplicación WPF. Por lo tanto, al final del método del hilo, llamo al Application.Current.Shutdown()
.
Como no estoy en el hilo principal, necesito invocar este comando. Sin embargo, luego noté que Dispatcher también tiene BeginInvokeShutdown()
para cerrar el despachador. Así que mi pregunta es: ¿Cuál es la diferencia entre la invocación de
Application.Current.Shutdown();
y llamando
Application.Current.Dispatcher.BeginInvokeShutdown();
Bueno, esa es precisamente la pregunta que no se responde en la documentación: ¿apagar el despachador de la aplicación también cierra la aplicación? –
Creé una aplicación de prueba WPF simple para esto. Para simular su código, lo hice: 'Thread t = new Thread (new ThreadStart (delegate() {Thread.Sleep (50000);})); t.Start(); Application.Current.Dispatcher .BeginInvokeShutdown (System.Windows.Threading.DispatcherPriority.Normal); '. El cierre de Dispatcher eliminó el hilo del propietario y cerró la ventana, pero no * mató el hilo de fondo. – JustABill
Dos pequeñas diferencias: 1) Llamo apagado en el segundo hilo (aunque a través de las pruebas puedo ver que no hace ninguna diferencia). 2) Tengo el segundo hilo configurado como hilo de fondo (IsBackground = true). De esa manera, también se mata si el hilo principal se cierra. –