2011-04-14 5 views
6

Pourriez-vous dire à un débutant pourquoi cette petite application WPF ne se ferme pas comme prévu après le déclenchement de l'événement WorkflowTerminated? Le flux de travail utilisé s'arrête juste immédiatement. (à l'aide d'une application WPF, .Net Framework 3.5)Fenêtre WPF ne se fermant pas

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

Lors de la définition d'un point d'arrêt dans le eventhandler terminé, est-il même exécuté? – ZoolWay

+0

Oui, il s'appelle. – nabulke

+1

Bonne question en passant, cela me hantait auparavant et était très difficile à comprendre, +1 –

Répondre

6

Probablement parce que le rappel est sur un autre thread. Une solution de base est de mettre fin à l'application tout à fait à l'aide Environment.Exit(1);

Pour appeler la fonction de fermeture sur le thread d'interface utilisateur, vous devez utiliser:

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

Mon objet Application n'a pas de méthode exit(). Propably parce que c'est une application WPF? J'ai essayé Application.Current.Shutdown() qui n'aide pas. Ne ferme toujours pas ... – nabulke

+0

Pardonnez-moi, il devrait lire 'Environment.Exit (1);' –

+0

Comment pourrais-je publier l'événement terminate sur le bon fil (fil de l'interface graphique)? – nabulke

Questions connexes