2010-02-09 9 views
5

मुझे एक अलग थ्रेड में एक फॉर्म बनाने की आवश्यकता है और जब तक कोई उपयोगकर्ता मुख्य थ्रेड में कोई कार्रवाई नहीं करता है (एक बटन क्लिक करें) तब तक इसे रैनिंग करना होगा।एप्लिकेशन संदेश लूप शुरू करने के लिए wpf विधि

यह बहुत

System.Windows.Forms.Application.Run(new ApplicationContext()); 

कि मौजूदा सूत्र में एक आवेदन संदेश पाश शुरू होता है का उपयोग कर ऐसा करने के लिए मुश्किल नहीं है। लेकिन इस समाधान के लिए System.Windows.Forms नामस्थान के उपयोग की आवश्यकता है, जो एक wpf नेमस्पेस नहीं है।

क्या आप इस लक्ष्य को प्राप्त करने के लिए एक wpf-way जानते हैं? =)

पीएस एक एप्लिकेशन संदेश लूप शुरू किए बिना थ्रेड को अंतिम अभिव्यक्ति की प्रसंस्करण के बाद तुरंत समाप्त कर दिया जाएगा। तो, फॉर्म केवल एक पल के लिए दिखाई देगा और बंद हो जाएगा। ? ब्लॉग से = (इस मदद

उत्तर

4

उपयोग System.Windows.Threading.Dispatcher.Run()

-1

करता

Application.DoEvents in WPF Revisited

कोड निकालने:

using System; 
using System.Threading; 
using System.Windows; 
using System.Windows.Threading; 

namespace Sheva.Windows 
{ 
    /// <summary> 
    /// Designates a Windows Presentation Foundation application with added functionalities. 
    /// </summary> 
    public class WpfApplication : Application 
    { 
     /// <summary> 
     /// Processes all messages currently in the message queue. 
     /// </summary> 
     /// <remarks> 
     /// This method can potentially cause code re-entrancy problem, so use it with great care. 
     /// </remarks> 
     public static void DoEvents() 
     { 
      Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { })); 
     } 
    } 
} 
+0

नहीं, यह नहीं है ( – user101375

4

और, Dispatcher.PushFrame

यह आसान becaus है ई यह आपको एक स्टॉप मानदंड तक परिभाषित करने तक मैसेजेलोप चलाने की अनुमति देता है, उदाहरण के लिए स्क्रीन पर एक प्रगति संवाद है।

+0

बहुत रोचक विधि। क्या आपके पास इसका उपयोग करने का कोई उदाहरण है? – user101375

+0

मेरे पास कुछ भी आसान नहीं है, मैंने इसे अपनी पिछली कंपनी में इस्तेमाल किया। मुझे लगता है कि मैंने आमतौर पर डिस्पैचरफ्रेम बनाया है, फिर संवाद विंडो बनाएं, इसे डिस्पैचरफ्रेम ऑब्जेक्ट का संदर्भ दें, और उसके बाद पुशफ्रेम को कॉल करें। जब प्रक्रिया पूर्ण हो जाती है, या उपयोगकर्ता रद्द कर देता है, तो आप डिस्पैचर फ़्रेम की संपत्ति को गलत पर सेट करते हैं। थ्रेडेड कोड में, मैं पहले संकेत करता हूं पृष्ठभूमि थ्रेड को रद्द करने के लिए, और इसके लिए यूआई थ्रेड को सिग्नल करने के लिए प्रतीक्षा करें कि इसे वास्तव में रद्द कर दिया गया है, और उस घटना पर जारी रखें = झूठी करें। –

+0

'डिस्पैचर.रुन' बस 'डिस्पैचर.पशफ्रेम' (नया डिस्पैचरफ्रेम()); '। तो यह वही है। – NtFreX

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