2009-04-13 33 views

回答

2

您可能会被抛出的是,必须异步处理Silverlight中的Web服务调用。

当你定义一个WebMethod时,比如说你有一个名为WorkMan的类叫做DoWork。您在Silverlight的代码最终会看起来像:

WorkManSoapClient client = new WorkManSoapClient(); 
client.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(this.DoWorkCompleteHandler); // where DoWorkCompletedHandler handles the callback. 

然后你打电话给你的实际方法,并允许回调处理结果。

client.DoWorkAsync(); 

如果你的webmethod返回一个值,你的EventArg对象将有一个Result属性,你可以利用它的结果。

最后一点:个人风格的东西,但我喜欢lambda表达式,而不是为回调生成一个全新的方法。我可能会写如下内容:

WorkManSoapClient client = new WorkManSoapClient(); 
client.DoWorkCompleted += (s,e) => { 
    if(e.Result != null){ 
     object foo = e.Result; 
    } 
}; 
client.DoWorkAsync(); 
+0

我很抱歉,但这剂量对我有效,我仍然无法从方法中获得值。 – 2009-04-14 12:12:58

相关问题