5

私は、Silverlight 4アプリケーションでRIA Services DomainContextを使用してデータをロードしています。 UIスレッドからコンテキストを使用している場合、コールバックは常にUIスレッドになるでしょうか?非同期RIAサービスコールを実行するときに実行されるコールバックはどのスレッドですか?

コールバックは常にコールと同じスレッドにありますか?あなたはUIスレッド上DomainContextの負荷メソッドを実行した場合

シナリオを示す以下のいくつかのサンプルコード...

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スレッドで実行されるコールバックです。

これは、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

関連する問題