2009-05-01 21 views
7

Llamo al Application.Current.Shutdown() desde una clase que está vinculada a xaml windows con ObjectDataProvider, pero la aplicación no se está cerrando. ¿Alguien puede ayudarme a entender por qué? Mi aplicación no se cierra completamente después de que se cierra mi ventana principal, no desaparece de la lista de procesos del administrador de tareas.La aplicación WPF no se cierra correctamente

Respuesta

8

¿Ha creado algún subproceso para procesar el fondo? Si tiene, asegúrese de establecer la propiedad .IsBackground en ellos, o pueden mantener la aplicación ejecutándose

+0

No, no creo subprocesos directamente, ¿puede WPF hacer enlaces o recursos objectdataprovider en otro hilo? –

1

Si tiene varias ventanas o cuadros de diálogo en su aplicación, puede que necesite cerrar cada uno explícitamente.

Cerrar diálogos con:

_myDialog.Close();

Cierre todas las ventanas:

foreach(var window in Application.Current.Windows.ToList()) 
{ 
    window.Close(); 
} 
+0

Intento esto, no ayuda, me doy cuenta de dónde está el problema, el problema es que cuando llamo a shutdown() o close() la ejecución objectdataprovider no finaliza, creo que será mejor agregar una nueva pregunta , ¿qué haré ahora :) –

+0

seguramente podría reemplazar el (i ...) con un foreach? iterar manualmente sobre los bucles es tan del último siglo :-) –

25

intenta Environment.Exit(0) lugar

+3

llamando 'Shutdown()' desde dentro de 'override OnStartup() 'NO estaba funcionando. 'Environment.Exit (0)' funciona –

4

No se olvide de añadir lo siguiente:

private void Window_Closed(object sender, EventArgs e) 
{ 
    Application.Current.Shutdown(); 
} 

Espero que esto ayude.

0

Tuve el mismo problema, el proceso de solicitud no se detiene aunque la aplicación se cerró.

En mi caso me abrió una ventana de una BackgroundWorker (código de abajo)

BackgroundWorker BG = new BackgroundWorker(); 
BG.DoWork += new DoWorkEventHandler(BG_DoWork); 
StockMinWindow MinWindow = new StockMinWindow(null); -------- this is the problem 
BG.RunWorkerAsync(); 

instanciate la ventana antes de ejecutar el BackgroundWorker parece no ser el problema, pero borrando la línea de la aplicación cerrada correctamente

Abrí mi ventana desde el BackgroundWorker pero usando el hilo principal (código a continuación)

View.Dispatcher.BeginInvoke(new Action(delegate() 
{ 
    StockMinWindow MinWindow = new StockMinWindow(StockMinList); 
    MinWindow.Owner = View; 
    MinWindow.ShowDialog(); 
})); 

Espero que ayude.

0

Tuve un problema donde la aplicación no se apagaba incluso cuando la ventana principal estaba cerrada. Resultó que había hecho Hide() en la pantalla de bienvenida en lugar de Close(), así que todavía estaba al acecho en el fondo manteniendo la aplicación activa.

Cuestiones relacionadas