5 Stimmen

WPF-Fenster wird nicht geschlossen

Könnten Sie einem Anfänger erklären, warum diese kleine WPF-Anwendung nicht wie vorgesehen geschlossen wird, nachdem das Ereignis WorkflowTerminated ausgelöst wurde? Der verwendete Workflow wird einfach sofort beendet. (mit einer WPF-Anwendung, .Net Framework 3.5)

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();
    }
}

6voto

Teoman Soygul Punkte 25294

Wahrscheinlich, weil der Callback in einem anderen Thread läuft. Eine einfache Abhilfe besteht darin, die Anwendung insgesamt zu beenden, indem man Environment.Exit(1);

Um die Funktion close auf dem UI-Thread aufzurufen, sollten Sie verwenden:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X