5

我在Silverlight 4应用程序中使用RIA Services DomainContext来加载数据。如果我使用UI线程中的上下文,回调是否始终在UI线程上?执行异步RIA服务调用时执行的回调是哪个线程?

或者换句话说,回调总是在与调用相同的线程上?

下面说明情景一些示例代码...

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

如果执行的UI线程的DomainContext的负载法,则是回调的UI线程也将执行。

当您使用由Load返回的LoadOperation的Completed-Event时,情况也是如此。

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

感谢Jehof,这是有用的知道,这是我在实践中发现的。我很感兴趣,但对我的具体问题得到明确的答案 - 它总是调用线程得到回调? (例如,如果我们不调用UI线程)。 – Chris

+0

@Chris:是的,回调会在调用线程中执行。加载是在后台线程中完成的,并且对于调用线程来说是非阻塞的。 – Jehof