2011-04-14 166 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