5

Tôi đang sử dụng RIA Services DomainContext trong ứng dụng Silverlight 4 để tải dữ liệu. Nếu tôi đang sử dụng ngữ cảnh từ chuỗi giao diện người dùng, cuộc gọi lại có luôn ở trên chuỗi giao diện người dùng không?Chuỗi nào đang thực thi gọi lại khi thực hiện cuộc gọi Dịch vụ RIA không đồng bộ?

Hoặc đặt một cách khác, gọi lại luôn có cùng chủ đề với cuộc gọi không?

Một số mã ví dụ dưới đây minh họa kịch bản ...

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

Trả lời

3

Nếu bạn thực hiện Load-Phương pháp của DomainContext trên UI-Thread, sau đó là gọi lại cũng thực hiện trên giao diện người dùng-Thread.

Điều này cũng đúng, khi bạn sử dụng Sự kiện đã hoàn thành của LoadOperation được trả về bằng Tải.

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

Cảm ơn Jehof, điều này rất hữu ích để biết và đó là những gì tôi đã tìm thấy trong sự chuẩn bị. Tôi quan tâm mặc dù để có được một câu trả lời dứt khoát cho câu hỏi cụ thể của tôi - là nó luôn luôn là thread gọi được gọi lại? (ví dụ: nếu chúng tôi không gọi trên chuỗi giao diện người dùng). – Chris

+0

@ Chris: Có, cuộc gọi lại được thực hiện trong chuỗi cuộc gọi. Việc tải được thực hiện trong một chủ đề nền và nó không bị chặn cho chuỗi cuộc gọi. – Jehof

Các vấn đề liên quan