5

मैं डेटा लोड करने के लिए सिल्वरलाइट 4 ऐप में एक आरआईए सेवा डोमेन कॉन्टेक्स्ट का उपयोग कर रहा हूं। यदि मैं यूआई थ्रेड से संदर्भ का उपयोग कर रहा हूं, क्या कॉलबैक हमेशा यूआई थ्रेड पर होगा?एसिंक्रोनस आरआईए सेवा कॉल करते समय कॉलबैक निष्पादित करने वाला कौन सा थ्रेड है?

या एक और तरीका डालें, कॉलबैक हमेशा कॉल के समान थ्रेड पर है?

परिदृश्य को दर्शाता हुआ नीचे कुछ उदाहरण कोड ...

private void LoadStuff() 
    { 
     MyDomainContext context = new MyDomainContext(); 
     context.Load(context.GetStuffQuery(), op => 
     { 
      if (!op.HasError) 
      { 
       // Use data. 

       // Which thread am I on? 
      } 
      else 
      { 
       op.MarkErrorAsHandled(); 

       // Do error handling 

      } 
     }, null 
     ); 
    } 

उत्तर

3

आप यूआई-थ्रेड पर DomainContext का लोड-विधि पर अमल करते हैं, तो कॉलबैक भी यूआई-थ्रेड पर निष्पादित है।

यह भी सच है, जब आप लोड द्वारा लौटाए गए लोडऑपरेशन के पूर्ण-ईवेंट का उपयोग करते हैं।

LoadOperation<Stuff> operation = context.Load(context.GetStuffQuery()); 
operation.Completed += (o, e) { 
    if (!operation.HasError) { 
    // Use data. 

    // Which thread am I on? 
    } 
    else { 
    op.MarkErrorAsHandled(); 
    // Do error handling 
    } 
}; 
+0

धन्यवाद जेहोफ, यह जानना उपयोगी है और यह मुझे प्रैटिस में मिला है। मुझे दिलचस्पी है कि मेरे विशिष्ट प्रश्न का एक निश्चित उत्तर प्राप्त करने के लिए - क्या यह हमेशा कॉलिंग थ्रेड है जो कॉलबैक प्राप्त करता है? (उदाहरण के लिए यदि हम यूआई थ्रेड पर कॉल नहीं कर रहे हैं)। – Chris

+0

@ क्रिस: हाँ, कॉलबैक कॉलिंग थ्रेड में निष्पादित हो जाता है। लोडिंग पृष्ठभूमि थ्रेड में किया जाता है और यह कॉलिंग थ्रेड के लिए गैर-अवरुद्ध है। – Jehof

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