如何在调用时立即执行异步调用?

时间:2014-07-10 12:47:37

标签: c# silverlight webmethod

在WebMethod的帮助下分配值时遇到问题。我有一个方法,我称之为WebMethod:

................
svc.GetNameCompleted += GetUserName;
svc.GetNameAsync(ordercode);

string name = MyName;
................

问题是第三行首先执行(string name = MyName;)然后执行GetUserName()方法。

GetUserName()方法中,我为MyName变量赋值,但由于这是在{string name=MyName之后调用的,所以第一次执行项目时,我得到{{ 1}}因为string name = null;变量是MyName

3 个答案:

答案 0 :(得分:1)

Async方法应返回Task,以便您可以等待其完成:

svc.GetNameCompleted += GetUserName;
Task<string> nameTask = svc.GetNameAsync(ordercode);

...

string name = await nameTask;

答案 1 :(得分:0)

据我所知,你不能。 Silverlight中的所有Web服务调用都是异步的。您无法同步调用异步方法。 您应该以异步方式捕获结果,并在方法完成执行后立即告诉Silverlight如何处理它。

我认为您的网络方法应该write an EventHandler,以便管理方法的完成并处理结果。

答案 2 :(得分:0)

只有在您拥有名称后才能设置name,这将在您定义为GetUserName的方法中进行(不是{{1}的一个好名字)虽然处理程序,所以我在下面的例子中重命名了它)

GetNameCompleted