2011-12-20 11 views
9

मैं एक परियोजना है जो निम्नलिखित तकनीकों का उपयोग करता पर काम कर रहा हूँ:कार्यकर्ता धागे के भीतर से यूआई थ्रेड पर एक विधि कैसे शुरू करें?

  • सी # (.NET 4.0)
  • WCF
  • प्रिज्म 4

मैं वर्तमान में एक अतुल्यकालिक कॉल कर रहा हूँ प्रॉक्सी द्वारा उत्पन्न आरंभ/समाप्ति विधियों का उपयोग करके हमारी वेब सेवाओं में से एक के लिए। कॉल सफल है और ग्राहक कार्यकर्ता धागे पर वेब सेवा की प्रतिक्रिया प्राप्त करने में सक्षम है।

प्रतिक्रिया प्राप्त होने के बाद, मैं एक कार्यक्रम बढ़ाने के लिए आगे बढ़ता हूं। वर्ग घटना की सदस्यता ली एक यूआई नेविगेशन का उपयोग प्रिज्म अनुरोध करने के लिए आगे बढ़ता है:

Application.Current.Dispatcher.BeginInvoke(new Action(() => 
    this.RegionManager.RequestNavigate(RegionNames.LoginContentRegion, projectSelectionViewUri))); 

के बाद से अतुल्यकालिक WCF प्रतिक्रिया यूआई धागा पर दिखाई नहीं दे रहा है, मैं Application.Current.Dispatcher.BeginInvoke(...) का उपयोग कर यूआई धागा आह्वान करने के लिए मजबूर कर रहा हूँ।

समस्या यह है कि चालान कुछ भी नहीं करता है। यूआई अपडेट नहीं किया गया है, और कोई अपवाद नहीं फेंक दिया गया है।

कार्यकर्ता धागे पर उठाए गए किसी ईवेंट के भीतर से यूआई थ्रेड को कैसे शुरू किया जाना चाहिए?

संपादित करें: यह सवाल दिए गए लिंक पर फिर से कहा गया है, के बाद से माना जाता डुप्लिकेट एक जवाब प्रदान नहीं करता है:

Request UI navigation using PRISM 4 on an asynchronous WCF response thread

+2

यह धागा क्यों बंद हुआ था। संभावित डुप्लिकेट डब्ल्यूपीएफ विंडोज के साथ सौदा नहीं करता है, और लगभग 3 साल पुराना है, मुझे लगता है कि यह एक आम विषय (साइट चौड़ा) है लेकिन संभावित डुप्लिकेट कुछ भी असामान्य नहीं है। –

+0

मैं रामाउंड से सहमत हूं ... –

उत्तर

5

आप सुनिश्चित करें कि आप वास्तविक यूआई Dispatcher पर लागू कर रहे हैं बनाने की जरूरत है , Current आवश्यक नहीं है। आप UI Dispatcher में गुजरने का प्रयास कर सकते हैं, या कुछ प्रकार का कॉलबैक है जिसे यूआई द्वारा कहीं भी संभाला जाएगा।

+0

मैं यूआई डिस्पैचर को पास करने के बारे में कैसे जाउंगा? –

+1

मान लें कि आप उस वर्ग को बनाते हैं जिसके लिए इसे कुछ UI तत्व (यानी 'UserControl') से आवश्यकता होती है, आप कुछ ऐसा कर सकते हैं:' var someClass = new SomeClass (this.Dispatcher); '। –

+0

@ हुसैनखिलिल - क्या आप मुख्य विंडो का संदर्भ नहीं भेज सकते हैं? –

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