मैं डब्ल्यूसीएफ डेटा सेवा का उपयोग कर रहा हूं मेरे पास एक विधि है:

[OperationContract]
    public List<string> GetAges()
    {
        return _registrationData.GetAges();
    }

मेरे ग्राहक पक्ष पर, मैं इसे इस तरह तुरंत चालू करता हूं:

_registrationDataServices = new RegistrationDataServiceClient();

यह अब एक प्रतिनिधि को उजागर करता है

_registrationDataServices.GetAgesCompleted += GetAgesCompleted;

और एक फ़ंक्शन कॉल:

_registrationDataServices.GetAgesAsync()

इसके साथ समस्या यह है कि सेवा के लिए कॉल अतुल्यकालिक होगी और परिणाम प्रतिनिधि समारोह में आते हैं, मैं सेवा को कॉल करने और परिणाम वापस आने तक प्रतीक्षा (ब्लॉक) करने में सक्षम होना चाहता हूं, यह डब्ल्यूसीएफ का उपयोग करके कैसे किया जा सकता है ?

मुझे एक डब्ल्यूसीएफ का उपयोग करना है, क्योंकि मेरे पास एक चांदी की रोशनी एप्लिकेशन है जिसे डेटाबेस से डेटा की आवश्यकता है, डब्ल्यूसीएफ को मेरी डेटा एक्सेस परत के रूप में .NET असेंबली से बुलाया जा रहा है।

0
Pacman 5 अगस्त 2011, 02:54
2
संभावित डुप्लिकेट stackoverflow.com/questions/647481/…
 – 
Nick B
5 अगस्त 2011, 03:00
सिल्वरलाइट इसलिए बनाई जाती है ताकि आप धागे को ब्लॉक न कर सकें। आपको ऐसा करने की आवश्यकता क्यों है?
 – 
svick
5 अगस्त 2011, 03:01
पंजीकरणडेटा सेवा क्लाइंट वर्ग किसने बनाया? क्या डॉक्स ऑनलाइन उपलब्ध हैं? क्या कोई .GetAges फ़ंक्शन है जो async नहीं है? आप वास्तव में यहां जो चाहते हैं वह फ़ंक्शन का एक गैर-अतुल्यकालिक संस्करण है।
 – 
Nick Udell
5 अगस्त 2011, 03:02
3
पंजीकरणडेटा सेवा क्लाइंट वर्ग विजुअल स्टूडियो में सेवा जोड़ें संदर्भ द्वारा स्वतः उत्पन्न होता है। फ़ंक्शन का कोई तुल्यकालिक संस्करण नहीं है .. यह स्पष्ट रूप से निराश है।
 – 
Nick B
5 अगस्त 2011, 03:37
आह, मैं देखता हूं, मुझे लगता है कि मैं "डब्ल्यूसीएफ" को "डब्ल्यूपीएफ" के रूप में मूर्खतापूर्ण तरीके से गलत तरीके से पढ़ता हूं। और इसके साथ ही मुझे लगता है कि मुझे उस बेहद जरूरी नींद में से कुछ मिल जाएगा
 – 
Nick Udell
5 अगस्त 2011, 04:06

2 जवाब

सबसे बढ़िया उत्तर

सिल्वरलाइट/डब्ल्यूपीएफ एप्लिकेशन से सिंक्रोनस रूप से वेब सेवा को कॉल करना एक बहुत ही खराब अभ्यास है। वेब सेवा कॉल समाप्त होने तक सिंक कॉल आपके UI को हैंग कर देगी, जिससे खराब उपयोगकर्ता अनुभव होगा। हालांकि, अगर आप अभी भी इसके लिए तैयार हैं, तो यहाँ एक बहुत ही उपयोगी लिंक है

4
svick 6 अगस्त 2011, 00:03
3
मैं बुरी अभ्यास टिप्पणियों से पूरी तरह सहमत हूं। इंटरनेट एक अजीब जानवर है और आपको हमेशा यह मान लेना चाहिए कि आपके कॉल का सबसे बुरा होगा।
 – 
Alastair Pitts
5 अगस्त 2011, 03:25

इसे सिंक्रोनाइज़ न करें -- आप UI थ्रेड को ब्लॉक कर देंगे। उपयोगकर्ता आमतौर पर सोचते हैं कि यदि UI फ़्रीज़ हो गया है तो उनका सॉफ़्टवेयर क्रैश हो गया है।

आदर्श रूप से आप एक मोडल बिजी इंडिकेटर बनाएंगे जो कॉल के वापस आने की प्रतीक्षा करते समय 'प्रगति' को एनिमेट और दिखाता है, और जब आप पूर्ण ईवेंट प्राप्त करते हैं तो यह चला जाता है।

यहां तक ​​​​कि अगर आप अभी भी आश्वस्त थे कि आपके मामले में UI थ्रेड को ब्लॉक करना ठीक था, तो आप वास्तव में इसे सिंक्रोनाइज़ नहीं कर सकते! इसे इस तरह से एक कारण के लिए डिजाइन किया गया था - प्रवाह के साथ जाओ।

0
Nick B 5 अगस्त 2011, 03:47
आप GUI में एक बिजीइंडिकेटर ऑब्जेक्ट का उपयोग कर सकते हैं।
 – 
Juan Carlos Velez
9 अगस्त 2011, 21:17