2011-04-14 167 views
6

你能告訴初學者爲什麼這個小的WPF應用程序在WorkflowTerminated事件觸發後沒有按照預期關閉?使用的工作流程會立即終止。 (使用WPF應用程序,.Net Framework 3.5)WPF窗口沒有關閉

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

當設置在終止-事件處理程序斷點時,它甚至被處決? – ZoolWay 2011-04-14 07:28:37

+0

是的,它被稱爲。 – nabulke 2011-04-14 07:30:09

+1

好的問題的方式,這使我困擾之前,很難計算,+1 – 2011-04-14 07:49:48

回答

6

可能因爲回調在另一個線程上。一個基本的解決辦法是完全終止使用Environment.Exit(1);

要調用UI線程上的關閉功能,你應該使用的應用程序:

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

我的應用程序對象沒有exit()方法。可能是因爲它是一個WPF應用程序?我嘗試了Application.Current.Shutdown(),這沒有幫助。仍然不關閉... – nabulke 2011-04-14 07:35:49

+0

請原諒我應該閱讀'Environment.Exit(1);' – 2011-04-14 07:37:06

+0

如何將終止事件發佈到正確的線程(GUI線程)? – nabulke 2011-04-14 07:37:07