5

Estoy usando un RIA Services DomainContext en una aplicación Silverlight 4 para cargar datos. Si estoy usando el contexto del hilo de la interfaz de usuario, ¿la devolución de llamada siempre va a estar en el hilo de la interfaz de usuario?¿Qué hilo ejecuta la devolución de llamada cuando se realiza una llamada de Servicios RIA asíncrona?

O dicho de otra manera, ¿la devolución de llamada siempre está en el mismo hilo que la llamada?

un código de ejemplo a continuación ilustra el escenario ...

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

Respuesta

3

Si se ejecuta la carga-Método de la DomainContext en la IU-Thread, entonces es también la devolución de llamada se ejecuta en la interfaz de usuario-Thread.

Esto también es cierto cuando utiliza el Evento Completo de LoadOperation devuelto por 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

Gracias Jehof, esto es útil para saber y es lo que he encontrado en la práctica. Sin embargo, estoy interesado en obtener una respuesta definitiva a mi pregunta específica: ¿es siempre el hilo de llamada el que recibe la devolución de llamada? (por ejemplo, si no estamos llamando al hilo de UI). – Chris

+0

@Chris: Sí, la devolución de llamada se ejecuta en el hilo de llamada. La carga se realiza en una cadena de fondo y no es bloqueante para la cadena de llamada. – Jehof

Cuestiones relacionadas