首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

silverlight异步调用webservice的有关问题

2012-05-16 
silverlight异步调用webservice的问题public string getSql(string PageName){string MySql string.Empt

silverlight异步调用webservice的问题
public string getSql(string PageName)
  {
  string MySql = string.Empty;
  SLNursing.WS.NurseMainInfo nurseMainInfo = (SLNursing.WS.NurseMainInfo)appSettings["UserInfo"];
  sClient.GetSqlAsync(nurseMainInfo.Role, PageName);
  sClient.GetSqlCompleted += (s, e) =>
  {
  if (e.Error == null) MySql = e.Result;
  };
  return MySql;
  }

 现在这个方法现在的返回值始终为空。我想请问下这样的话如何能够取得该方法的返回值,就是在这个方法运行完毕后

[解决办法]
看来你不了解异步这个概念。当服务器返回时,会自动执行回调函数里的代码,写异步通信就是要改掉以前的同步代码的习惯。
[解决办法]
为什么要转同步呢,在网络应用或者触摸应用中,异步能达到更好的体验,应该尽可能使用异步方式,而不是同步;LZ如果要是对委托够熟悉,你完全可以不用返回值的,传一个Action或者Func类型的委托就可以了,或者使用事件模式
[解决办法]
因为是异步调用的,所以你在调试的时候调用上下文sClient为0行,因为数据还没有加载完成。Completed 事件是加载完成后调用。

C# code
sClient.Completed += (se, ea) =>{//if (e.Error == null) MySql = e.Result;}
[解决办法]
是Completed 不是GetSqlCompleted
[解决办法]
当然有这个方法了呀!
[解决办法]
1 public string getSql(string PageName)
2 {
3 string MySql = string.Empty;
4 SLNursing.WS.NurseMainInfo nurseMainInfo = SLNursing.WS.NurseMainInfo) appSettings["UserInfo"];

5 sClient.GetSqlAsync(nurseMainInfo.Role, PageName);

6 sClient.GetSqlCompleted += (s, e) =>
7 {
8 if (e.Error == null) MySql = e.Result;
9 };

10 return MySql;
11 }
///////////////////////////////////
6、7、8、9 行是定义,这个定义在执行的时候走不到第10行,只是作为函数过程,但这个函数过程又没有返回值,你有没有发起异步调用(如:sClient.GetSqlAnsy(...);),所以就会出现你所说的结果。建议你显式地写定义而不是隐式定义。

private void m(object sender, GetSqlCompletedPara e)
{
if (e.Error == null) MySql = e.Result;
}

sClient.GetSqlCompleted +=//打完Tab键后自动生函数过程名,为简单记为m(s,e)
sClient.GetSqlAnsy(...);

热点排行