C# 如何使异步调用在被调用时立即执行?
我在使用WebMethod分配值时遇到问题。我有一个称为WebMethod的方法:C# 如何使异步调用在被调用时立即执行?,c#,silverlight,webmethod,C#,Silverlight,Webmethod,我在使用WebMethod分配值时遇到问题。我有一个称为WebMethod的方法: ................ svc.GetNameCompleted += GetUserName; svc.GetNameAsync(ordercode); string name = MyName; ................ 问题是第三行是第一个字符串name=MyName;然后是GetUserName方法 在GetUserName方法中,我给MyName变量赋值,但由于这是在string
................
svc.GetNameCompleted += GetUserName;
svc.GetNameAsync(ordercode);
string name = MyName;
................
问题是第三行是第一个字符串name=MyName;然后是GetUserName方法
在GetUserName方法中,我给MyName变量赋值,但由于这是在string name=MyName之后调用的,所以在我第一次执行项目时,我得到了string name=null;由于MyName变量为null。方法应返回一个值,以便您可以等待其完成:
svc.GetNameCompleted += GetUserName;
Task<string> nameTask = svc.GetNameAsync(ordercode);
...
string name = await nameTask;
据我所知,你不能。Silverlight中的所有web服务调用都是异步的。不能同步调用异步方法。 您应该以异步方式捕获结果,并在方法完成执行后立即告诉Silverlight如何处理它
我认为您应该为您的web方法设置名称,以便管理方法的完成情况并处理结果。您应该只在获得名称后才设置名称,这将发生在您定义为GetUserName的方法中,但对于GetNameCompleted处理程序来说,这不是一个很好的名称,因此我在下面的示例中对其进行了重命名
public void SomeMethod()
{
svc.GetNameCompleted += GetUserNameCompleted;
svc.GetNameAsync(ordercode);
}
public void GetUserNameCompleted(whatever the signature is)
{
string name = MyName;
}
通过NuGet添加Microsoft.Bcl。