2012-08-17 27 views
1

我有一些调用操作(所有不同),我需要根据用户选择的项存储在ObservableCollection并返回一个字符串/ int值调用操作。如何逐个调用多个调用操作?

现在,当选择只有一个项目时,它很简单,我可以调用并使用Completed事件并获取我的返回值。

我有约< =我需要迭代和执行每个invoke操作的列表中的8个项目。

我看foreach不会真正等待InvokeOperation完成,只是不断地迭代直到列表的末尾使他们在parallel..sort运行...

如何执行只需一个人操作一次只在前一次操作完成时进行迭代(不管结果如何)?

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

让我知道如果我不清楚..

干杯。编辑: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  
    } 

} 
+2

什么* *究竟你说的“调用操作”是什么意思?请给我们一些代码。 – 2012-08-17 10:32:57

+0

我猜他想为每个选定的项目调用(异步)方法,他有一个方法签名,一次只需要一个项目,不知道如何链接调用。 我的第一个建议是编写一个方法,该方法需要一个项目集合,异步调用它并在此方法中执行foreach。 – Paciv 2012-08-17 10:59:41

回答

2

查看Silverlight的Reactive Extensions。您可以轻松地将您的RIA服务InvokeOperation包装在代表其异步完成的IObservable中。一种方法是使用Observable.Create方法。

之后,你就可以撰写的IObservables集合中的许多方面:使用Observable.Concat按顺序执行它们,使用Observable.ForkJoin并行执行它们,过滤它们,将它们连接等

我已经使用这个成功为RIA Services的加载操作,并在较小程度上调用操作。在我看来,观察对象的可组合性比使用回调方法更明智。

这里是一个博客帖子概述了加载操作的方法,但是这种方法会非常类似:Linq Query Expression Syntax with RIA Domain Context

+0

纵观IObservable接口now..cheers .. – Searching 2012-08-17 19:16:38