Silverlight 2如何知道所有异步WCF调用已完成
工具:SilverLight 2、C#3.5、VS2008和WCF 异步编程 在我的SL2应用程序中,我进行了3次异步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.
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.
}