5

Używam kontekstu usług RIA Services w aplikacji Silverlight 4 do ładowania danych. Jeśli używam kontekstu z wątku interfejsu użytkownika, czy wywołanie zawsze będzie w wątku interfejsu użytkownika?Który wątek jest wywołaniem zwrotnym wykonywanym podczas wykonywania asynchronicznego wywołania usług RIA?

Innymi słowy, czy oddzwonienie jest zawsze w tym samym wątku, co połączenie?

Niektóre przykładowy kod poniżej ilustrujący scenariusz ...

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 
     ); 
    } 

Odpowiedz

3

Jeśli wykonanie obciążenia Sposób DomainContext na UI-nitkowa, następnie wykonywany jest zwrotna również na UI-wątek.

Dotyczy to również sytuacji, gdy użyto zdarzenia zakończonego operacji LoadOperation zwróconej przez Load.

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

Dzięki Jehofowi warto o tym wiedzieć i to właśnie znalazłem w praktyce. Interesuje mnie jednak uzyskanie ostatecznej odpowiedzi na moje konkretne pytanie - czy zawsze jest to wywołujący wątek, który otrzymuje wywołanie zwrotne? (na przykład, jeśli nie wywołujemy wątku UI). – Chris

+0

@ Chris: Tak, wywołanie zwrotne zostanie wykonane w wątku wywołującym. Ładowanie odbywa się w wątku tła i nie jest blokujące dla wątku wywołującego. – Jehof

Powiązane problemy