我是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));
答案 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中禁止同步阻塞调用,因此您甚至没有这种可能性。