1

ユーザーが選択したアイテムに基づいて呼び出す必要がある呼び出し操作がいくつかあります (すべて異なる) に格納されObservableCollection、string/int 値を返します。

選択項目が 1 つだけの場合は簡単ですCompleted。イベントを呼び出して使用し、戻り値を取得できます。

リストには約8個のアイテムがあり、それぞれに対して繰り返しinvoke操作を実行する必要があります。

foreachが終了するのを実際には待たずInvokeOperation、リストの最後まで継続的に反復し、それらを並行して実行することがわかります..一種の...

一度に 1 つの操作のみを実行し、(結果に関係なく) 前の操作が完了したときにのみ繰り返すにはどうすればよいですか?

InvokeOperations の 1 つずつ実行は、私が探しているものです..手がかり、ヒント..?

不明な点があれば教えてください..

乾杯。

編集: InvokeOperation(s) は互いに異なります。それぞれがDB上で異なる操作を行うため、時間がかかる可能性があります。それらを1対1で実行することを検討する主な理由は、それぞれの出力(成功/失敗)でユーザー画面を更新し、一度にすべてを実行しないことです。 .

//Pseudo-code
foreach (var item in SelectedItems) 
{

    var id = item.ID;

    switch(id) 
    {    
      case: 1
         InvokeOperataion<int> inv = context.PerformUpdateFor_1(item);
         inv.Completed += (s,a) => { 
         //get the value assign it to Textblock.
         };
         break;
      case: 2
         InvokeOperataion<int> inv = context.PerformUpdateFor_2(item);
         inv.Completed += (s,a) => { 
         //get the value assign it to Textblock.
         };
         break;
//Other cases similar to this    
   }

}
4

1 に答える 1

2

Silverlight の Reactive Extensions をご覧ください。非同期完了を表すInvokeOperationでRIA サービスを簡単にラップできます。IObservableこれを行う 1 つの方法には、Observable.Createメソッドが含まれます。

その後、IObservablesさまざまな方法で のコレクションを構成できるようになります。 を使用して順番Observable.Concatに実行する、 を使用して並列に実行するObservable.ForkJoin、フィルターに掛ける、結合するなどです。

私はこれを RIA Services のロード操作に使用して成功しました。私の意見では、Observable のコンポーザビリティは、コールバック メソッドを明示的に記述するよりもはるかに使いやすいものです。

ロード操作のアプローチを概説したブログ投稿を次に示しますが、アプローチは非常に似ています: RIA ドメイン コンテキストを使用した Linq Query Expression Syntax

于 2012-08-17T18:15:27.470 に答える