2011-09-26 15 views
7

में डिस्पैचर। बेगीनइनवोक() का उपयोग यूआई थ्रेड में कोड के कुछ टुकड़े को निष्पादित करने के लिए किया जाता है। हाल ही में मैंने देखा कि वहां 'परिनियोजन' वर्ग का उपयोग करके डिस्पैचर उदाहरण प्राप्त करने का एक और तरीका है। मैंइस बीच अंतर। डिस्पैचर.बिनगिनवोक() और परिनियोजन। वर्तमान। डिस्पैचर। सिग्नललाइट

जानना चाहते हैं वहाँ this.Dispatcher.BeginInvoke() और Deployment.Current.Dispatcher.BeginInvoke() कार्यों?, और

जब मैं का उपयोग करना चाहिए की invokation के बीच किसी भी diffrence है यह। डिस्पैचर.बिनजिन इनवोक() और परिनियोजन। वर्तमान। डिस्पैचर.बिनजिन इनवोक()?

धन्यवाद एलेक्स

उत्तर

11

लघु जवाब: वे सिल्वरलाइट में ही कर रहे हैं, इसलिए छोटा एक (यदि आपके कोड के संदर्भ में उपलब्ध है) का उपयोग करें।

this.Dispatcher.BeginInvoke() सुनिश्चित करता है कि यह थ्रेड पर चल रहा है कि प्रश्न में नियंत्रण चल रहा है।

Deployment.Current.Dispatcher.BeginInvoke() यह सुनिश्चित करता है कि यह मुख्य यूआई थ्रेड पर चल रहा है।

दोनों सिल्वरलाइट में हमेशा समान होते हैं (और आमतौर पर WPF में समान होते हैं, जब तक कि आपने अतिरिक्त यूआई थ्रेड नहीं बनाए हैं)।

this.Dispatcher.BeginInvoke() का उपयोग करें जब तक कि आपके वर्तमान संदर्भ में प्रेषक न हो, फिर इसके बजाय वैश्विक का उपयोग करें।

+0

किस परिस्थिति में वे समान नहीं हैं? – AnthonyWJones

+0

@ एंथनीWJones: Dispatcher.Current कोड को निष्पादित करने वाले थ्रेड से जुड़े प्रेषण ऑब्जेक्ट को पुनर्प्राप्त करता है। इसलिए वे अलग-अलग धागे पर बुलाए जाने पर समान नहीं होते हैं। – Will

+0

@Will: क्या आपका मतलब परिनियोजन था। वर्तमान या डिस्पैचर। वर्तमान? – wizzardz

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