1

我有一些调用操作(全部不同),我需要根据存储在 an 中ObservableCollection并返回字符串/int 值的用户选择的项目来调用它们。

Now when the selection is only one item it is straight forward, I can call and use the Completedevent and get my return value.

我在列表中有大约 <= 8 个项目,我需要对其进行迭代并执行invoke操作。

我看到foreach不会真正等待InvokeOperation完成,而是不断迭代直到列表末尾,使它们并行运行......有点......

如何一次只执行一个操作并仅在前一个操作完成时迭代(无论结果如何)?

InvokeOperations 的 1 对 1 执行是我正在寻找的..任何线索,提示..?

如果我不清楚,请告诉我。

干杯。

编辑:InvokeOperation(s)彼此不同。他们每个人都在数据库上执行不同的操作,这可能很耗时。研究以 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 的反应式扩展。您将能够轻松地将您的 RIA 服务包装InvokeOperation在一个IObservable代表其异步完成的文件中。做到这一点的一种方法涉及该Observable.Create方法。

之后,您将能够以IObservables多种方式组成集合:使用顺序Observable.Concat执行它们,使用并行执行它们Observable.ForkJoin,过滤它们,加入它们等。

我已经成功地将它用于 RIA 服务的加载操作,并在较小程度上调用操作。在我看来,observable 的可组合性比显式编写回调方法要好得多。

这是一篇博客文章,概述了加载操作的方法,但方法非常相似:Linq Query Expression Syntax with RIA Domain Context

于 2012-08-17T18:15:27.470 回答