2011-07-15 6 views
0

SilverlightでRIAサービスを使用していて、次のコードを使用してDataItemCollectionでコレクションを読み込みます。同期要求を伴うSilverlight RIAサービス

私の問題はLoadOperationを実行して0行を返し、しばらくしてから再びデバッガでコントロールを取得してからforループを実行し、正しいカウントを返します。

したがって、非同期のようです。どうすればデータを返す間に正しいカウントが得られるように同期的に取得できますか?

ReportingCategoryContentAssociationContext _ReportingCategoryContentAssociationContext = new ReportingCategoryContentAssociationContext(); 

DataItemCollection lstdt = new DataItemCollection(); 

      LoadOperation loadopt = _ReportingCategoryContentAssociationContext.Load(_ReportingCategoryContentAssociationContext.GetReportingContentScoreByCategoryQuery()); 

loadopt.Completed += (s, args) => 
      { 
       if (!loadopt.HasError) 
       { 

        DataItem dtitem = null; 
        foreach (GetReportingCategoriesContentScore_Result Lkt in ((LoadOperation<GetReportingCategoriesContentScore_Result>)s).Entities) 
        { 
         dtitem = new DataItem(); 
         dtitem.ReportingCategoryID = Lkt.CategoryID; 
         dtitem.ParentCategoryID = Lkt.ParentCategoryID; 
         dtitem.CategoryTitle = Lkt.CategoryTitle; 
         lstdt.Add(dtitem); 
        } 
       } 
      }; 
+0

HiTech Magicの回答が正しいです。あなたはそれが非同期であるために何か問題に遭遇していますか? –

答えて

3

SilverlightでのすべてのRIAサービス呼び出しは非同期です。

loadopt.Completed += (s, args) =>コードは匿名の非同期コールバックです。ロードをシングルステップでデバッグすることは、コードが順番に起こっていると思ってしまうことになります。

完了したイベントコールバック内のデータに対してのみ操作できます。

+0

完成したイベントコールバックでデータを操作する例を教えてください。それとも概念を説明するURLを教えてください。 –

+0

コールバック関数を使用しようとすると、おそらくもっと意味をなさないでしょう。新しいコールバックメソッドを作成するには、loadopt.Completed =を再入力し、=の後にTabキーを2回押します。匿名メソッドは、コードをそれよりも複雑に見せることができます。 –