2011-04-14 10 views
6

¿Podría decirle a un principiante por qué esta pequeña aplicación WPF no se cierra como se esperaba después de que se desata el evento WorkflowTerminated? El flujo de trabajo utilizado simplemente termina inmediatamente. (utilizando una aplicación WPF, .Net Framework 3.5)Ventana WPF que no se cierra

public partial class MainWindow : Window 
{ 
    private WorkflowRuntime wfRuntime = new WorkflowRuntime(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     wfRuntime.WorkflowTerminated += (se, ev) => this.Close(); // this doesn't close the window 
     wfRuntime.WorkflowCompleted += (se, ev) => this.Close(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     WorkflowInstance launcherWorkflow = wfRuntime.CreateWorkflow(typeof(InstallerWorkflow)); 

     launcherWorkflow.Start(); 
    } 
} 
+0

Al establecer un punto de interrupción en el eventhandler-terminado, se ejecuta aún? – ZoolWay

+0

Sí, se llama. – nabulke

+1

Buena pregunta, por cierto, esto me atormentaba antes y era muy difícil de entender, +1 –

Respuesta

6

Probablemente porque la devolución de llamada está en otro hilo. Una solución básica es para terminar la aplicación por completo el uso de Environment.Exit(1);

Para llamar a la función de cierre en el hilo de interfaz de usuario que debe utilizar:

wfRuntime.WorkflowTerminated += (se, ev) => { 
    // call back to the window to do the UI-manipulation 
    this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate() 
    { 
     this.Close(); 
    })); 
}; 
+0

Mi objeto Aplicación no tiene un método exit(). Propably porque es una aplicación WPF? Intenté Application.Current.Shutdown() que no ayuda. Todavía no se cierra ... – nabulke

+0

Perdóneme, debería leer 'Environment.Exit (1);' –

+0

¿Cómo podría publicar el evento de terminación en el subproceso correcto (subproceso de GUI)? – nabulke

Cuestiones relacionadas