Silverlight 2如何知道所有异步WCF调用已完成

Silverlight 2如何知道所有异步WCF调用已完成,silverlight,asynchronous,Silverlight,Asynchronous,工具:SilverLight 2、C#3.5、VS2008和WCF 异步编程 在我的SL2应用程序中,我进行了3次异步wcf调用,如下所示- void HomeScreen() { //Async WCF Calls DataService.GetPersonInfo(sUser); DataService.GetSalaryInfo(sUser); DataService.GetDepartmentInfo(sUser); //Where to put this code? //Page.

工具:SilverLight 2、C#3.5、VS2008和WCF 异步编程

在我的SL2应用程序中,我进行了3次异步wcf调用,如下所示-

void HomeScreen()
{

//Async WCF Calls
DataService.GetPersonInfo(sUser);
DataService.GetSalaryInfo(sUser);
DataService.GetDepartmentInfo(sUser);

//Where to put this code?
//Page.Redirect("MainScreen");

}
在所有3个异步调用完成后,我需要将用户移动到主屏幕。 我如何知道所有3个异步调用都已完成

(不使用循环检查全局 异步方法状态的变量)

SL2是否有任何内置功能(如Jquery)来知道所有异步调用都已完成 前-

$().ajaxStop($.unblockUI);

有什么想法吗?

假设您在等待时无法再次拨打这些电话,您可以为每个服务添加一个完整的处理程序。在每个处理程序中,您可以为该调用设置一个标志,并让它们检查是否所有三个标志都已设置。如果是这样,则转到主屏幕。

类似于Jacob,将其抽象为一个单独的类。这将至少简化您的调用类,并消除加入调用的复杂性

在您的类中,用最简单的术语来说,就是在异步调用中的每个已完成事件上,检查已完成的事件数,如果与总数匹配,则触发您自己的已完成事件。像这样的事情:

public class DataProvider()
{
  private int callCount = 0;

  public event EventHandler Completed;
  public void Go()
  { 
    callCount = 0;
    //Async WCF Calls
    DataService.GetPersonInfo(sUser);
    DataService.GetSalaryInfo(sUser);
    DataService.GetDepartmentInfo(sUser);
  }

  public void GetSalaryInfoCompleted(object sender, SomeArgs e)
  {
    //Do something with the results here
     CheckIfCompleted();
  }
  public void GetDepartmentInfoCompleted(object sender, SomeArgs e)
  {
    //Do something with the results here
     CheckIfCompleted();
  }

  public void GetPersonInfoCompleted(object sender, SomeArgs e)
  {
     //Do something with the results here
     CheckIfCompleted();
  }

  private void CheckIfCompleted()
  {
     callCount++;
     if ( callCount == 3 )
     {
       Completed(this, EventArgs.Empty);
     }

  }

}
但是您的GetPersonInfo方法必须像

GetPersonInfo(user, Action<bool> complete){
   //And call complete.Invoke(true); or false based on completing of the processs.
}
GetPersonInfo(用户,操作完成){
//并调用complete.Invoke(true);或者根据进程的完成情况调用false。
}

希望能有帮助

哦。Rich Text Editor here remove\n:(我认为没有像您编写的Jquery那样的内置调用;您必须选择一个解决方法。我使用此方法来实现等待异步服务调用和动画完成。两个事件处理程序都调用该方法,在触发下一个事件之前检查它们是否都完成了。恭喜您!
GetPersonInfo(user, Action<bool> complete){
   //And call complete.Invoke(true); or false based on completing of the processs.
}