我创建了一个webservice和方法如下:
[WebMethod]
public bool GetMasterExit(int RoomID)
{
if(GameList[RoomID][0] == "\0")
return true;
else
return false;
}
然后我使用以下方式从WP客户端调用此方法,但是有一个问题,我希望主进程被阻塞,直到webservice返回我想要的值,但这样的方式是延迟错误的值。
我曾尝试使用Await,但我收到了一个错误,"无法等待无效",所以任何人都知道如何解决这个问题?
public void Test()
{
ServiceSoapClient GameClient = new ServiceSoapClient();
GameClient.GetMasterExitCompleted += _clientGetMasterExitCompleted;
GameClient.GetMasterExitAsync(RoomID);
Console.WriteLine(MasterExit);
}
public void _clientGetMasterExitCompleted(object sender, GetMasterExitCompletedEventArgs e)
{
MasterExit = e.Result;
}
答案 0 :(得分:0)
如果您愿意使用await
,则必须在函数签名中添加修饰符async
。希望这会有所帮助。
像这样使用async
和await
:
public async void Test()
{
ServiceSoapClient GameClient = new ServiceSoapClient();
GameClient.GetMasterExitCompleted += _clientGetMasterExitCompleted;
await GameClient.GetMasterExitAsync(RoomID);
Console.WriteLine(MasterExit);
}
答案 1 :(得分:0)
我希望主进程被阻止,直到webservice返回值
这是一种不正确的方法。特别是在WP等移动平台上,你不允许像这样阻止用户界面。
正确的解决方案是使用await
。关注Task-based Asynchronous Pattern并撰写EAP wrapper called GetMasterExitTaskAsync
。