2011-04-14 24 views
6

क्या आप एक नौसिखिया को बता सकते हैं कि वर्कफ़्लो टर्मिनेटेड घटना के बाद यह छोटा WPF-application बंद क्यों नहीं हो रहा है? प्रयुक्त वर्कफ़्लो तुरंत समाप्त हो जाता है। (एक WPF अनुप्रयोग का उपयोग करके, नेट फ्रेमवर्क 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

जब समाप्त-eventhandler में एक ब्रेकपाइंट की स्थापना, तो यह और भी निष्पादित किया जाता है: एक बुनियादी समाधान का आवेदन पूरी तरह Environment.Exit(1);

का उपयोग कर यूआई धागे पर करीब समारोह का उपयोग करना चाहिए कॉल करने के लिए समाप्त करने के लिए है? – ZoolWay

+0

हां इसे कहा जाता है। – nabulke

+1

रास्ते से अच्छा सवाल, यह मुझे पहले प्रेतवाधित और बहुत मुश्किल था, +1 –

उत्तर

6

शायद क्योंकि कॉलबैक किसी अन्य धागे पर है।

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

मेरा एप्लिकेशन ऑब्जेक्ट में बाहर निकलने() विधि नहीं है। उचित रूप से क्योंकि यह एक डब्ल्यूपीएफ आवेदन है? मैंने एप्लिकेशन की कोशिश की। Current.Shutdown() जो मदद नहीं करता है। अभी भी बंद नहीं है ... – nabulke

+0

मुझे माफ़ कर दो इसे पर्यावरण को पढ़ना चाहिए। एक्स्टिट (1); ' –

+0

मैं टर्मिनेंट ईवेंट को सही थ्रेड (जीयूआई थ्रेड) पर कैसे पोस्ट कर सकता हूं? – nabulke

संबंधित मुद्दे