2012-10-24 10 views
6

संभव डुप्लिकेट:
Why does ManualResetEvent fail to work in this synchronous call using Silverlight 4?ManualResetEvent WCF और Silverlight के साथ काम नहीं कर रहा

मैं MainPage.Xaml.cs में नीचे दिए गए कोड है

ManualResetEvent wait = new ManualResetEvent(false); 
Service1Client wcf = new Service1Client(); 
wcf.DoWorkCompleted += (o, ev) => 
{ 
    int s = (int)ev.Result; 
    wait.Set(); 
}; 
wcf.DoWorkAsync(); 
wait.WaitOne(); 

//My other part of code where I'd like the value of `int s`. 
.... 

Service1.svc .cs में नीचे कोड है।

public class Service1 : IService1 
{ 
    public int DoWork() 
    { 
    return 5; 
    } 
} 
DoWork तक

पूरा हो गया है मैं अपने कोड तो प्रतीक्षा करने के लिए मैं इस कोड लिखा है चाहता हूँ। हालांकि WaitOne निर्देश (Service1.svc.cs) विधि DoWork() के बाद भी कॉल नहीं किया जाएगा। आवेदन वहां रहेगा केवल कुछ भी नहीं करता है। मैंने सिल्वरलाइट 4 में एक और मशीन में इससे पहले काम किया है और यह उम्मीद के अनुसार काम कर रहा था। अब मैं सिल्वरलाइट 3 का उपयोग कर रहा हूं।

उत्तर

0

शायद आप पर कॉल करके UI थ्रेड पर डेडलॉक का कारण बन रहे हैं।

जब एसिंक ऑपरेशन पूरा हो जाता है, तो यह यूआई डिस्पैचर के माध्यम से DoWorkCompleted को आमंत्रित करने का प्रयास करता है। यद्यपि यह सफलतापूर्वक आमंत्रण कतारबद्ध करेगा, फिर भी यूआई थ्रेड WaitOne() पर अवरुद्ध होने के बाद से यह कभी भी समाप्त नहीं होगा।

मेरी राय में, आपको इस कामकाज से बचने और केवल एसिंक कॉल करना चाहिए।

+0

ईरेन मैंने पूरा नया एप्लीकेशन बनाया और अभी भी काम नहीं करने की कोशिश की। मैं नेविगेशन एप्लिकेशन का उपयोग कर रहा हूं। – Shrivallabh

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