Saturday 15 February 2014

c# - Task freezing UI thread -


कोड का मेरा ब्लॉक:

  डिस्पैचर.बीजिनइनवोक ((=) = & gt; {var उपयोगकर्ता = GetUsers () परिणाम;। // आगे बढ़ना ...} निजी कार्य से & lt; सूची से & lt; उपयोगकर्ता & gt; & gt; GetUsers () {var टीसीएस = नए TaskCompletionSource & LT; सूची से & lt; उपयोगकर्ता & gt; & gt; (); wbclient.DownloadStringCompleted + = (ओ , ई) = & gt; {if (e.Error == नल) tcs.SetResult (JsonConvert.DeserializeObject & LT; सूची से & lt; उपयोगकर्ता & gt; & gt; (e.Result)); बाकी tcs.TrySetException (e.Error);}; wbclient .डाउनलोडस्ट्रिंगएएसआईएनएससीएन (कुछयूआरआई); वापसी टीसीएस। टास्क;}   

मुझे आगे बढ़ने से पहले सभी उपयोगकर्ताओं को प्राप्त करना है। इसलिए मैं एक getUser विधि को कॉल कर रहा हूँ । डिस्पैचर मैं सिर्फ तक इंतजार करना चाहते हैं DownloadStringCompleted घटना होती है और फिर लौट लेकिन इसके बाद के संस्करण कोड यूआई जमा के साथ कोई भी मदद की सराहना की

नोट:।।। < /

मैं windows-phone 7 का उपयोग कर रहा हूं, जो async का इंतजार नहीं करता का समर्थन नहीं करता है

आप एक निरंतरता का उपयोग करें और Dispatcher.BeginInvoke कॉल और .Result अपने मुख्य थ्रेड जो ब्लॉक कर रहा है में कॉल:

  GetUsers ()। जारी रखें (t = & gt; {सूची & lt; उपयोगकर्ता & gt; उपयोगकर्ताओं = टी। परिणाम; This.TextBlock1.Text = "पूरा"; }, टास्क शेड्यूलर। फ्रॉम कंट्रंट सिंक्रोनियाजेशन कन्टेक्स ());   

सूचना कैसे मैं का इस्तेमाल किया है TaskScheduler.FromCurrentSynchronizationContext () निरंतरता में कॉल सुनिश्चित करना है कि इस निरंतरता मुख्य यूआई धागे पर मार्शल किया गया है।

No comments:

Post a Comment