5

Sto utilizzando un DomainContext Servizi RIA in un'applicazione Silverlight 4 per caricare i dati. Se sto utilizzando il contesto dal thread dell'interfaccia utente, la callback sarà sempre sul thread dell'interfaccia utente?Su quale thread è in esecuzione la richiamata durante l'esecuzione di una chiamata di servizi RIA asincroni?

In altre parole, la richiamata è sempre sullo stesso thread della chiamata?

Alcuni codice di esempio riportato di seguito illustra lo scenario ...

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

risposta

3

Se si esegue il carico-Metodo della DomainContext sulla UI-thread, quindi è il callback eseguito anche sulla UI-thread.

Questo è anche vero quando si utilizza l'evento Completato di LoadOperation restituito da 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

Grazie Jehof, questo è utile per sapere ed è quello che ho trovato in pratica. Mi interessa comunque ottenere una risposta definitiva alla mia domanda specifica: è sempre il thread chiamante a ricevere la richiamata? (per esempio se non stiamo chiamando il thread dell'interfaccia utente). – Chris

+0

@Chris: Sì, il callback viene eseguito nel thread chiamante. Il caricamento viene eseguito in un thread in background ed è non bloccante per il thread chiamante. – Jehof

Problemi correlati