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