有没有办法简化WebService的异步调用

时间:2012-01-19 13:38:35

标签: c# silverlight web-services

我是Silverlight开发的新手。 我写了一个迷你测试应用程序,它在服务器上进行身份验证。 我通过WCF WebServices进行的通信。

要使用WebService的Login(string, int)方法,我必须每次都使用此序列

1)使用 EventHandler

初始化数据成员

_ltsCl.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(_ltsCl_LoginCompleted);

其中var _ltsCl = new LoginToServerServiceClient();

LoginToServerService是WebService类

2)调用Async方法

_ltsCl.LoginAsync(txtUsername.Text, int.Parse(pbxPassword.Password));

3)用

获得结果

_ltsCl_LoginCompleted(object sender, LoginCompletedEventArgs e){}

是否有可能以类似这样的方式简化此序列

bool result = _ltsCl.Login(txtUsername.Text, int.Parse(pbxPassword.Password));

1 个答案:

答案 0 :(得分:2)

您可以将完整回调定义为匿名方法:

_ltsCl.LoginCompleted += (sender, e) => 
{
    var result = e.Result;
};
_ltsCl.LoginAsync(txtUsername.Text, int.Parse(pbxPassword.Password));

您显示的语法:

bool result = _ltsCl.Login(txtUsername.Text, int.Parse(pbxPassword.Password));
只有在处理过程中阻塞调用线程的同步调用才能执行

,并在完成此处理后返回结果。对于将控件立即返回到调用线程的异步方法没有任何意义。

但由于Silverlight中禁止同步阻塞调用,因此您甚至没有这种可能性。