[英]WebClient.OpenReadCompleted - how to wait for this event to finish
因此,非常高兴,我正在创建一个dll项目,该项目必须从bing maps api获取一些信息。 下面,我粘贴一个可用于获取和序列化响应的方法:
private void GetResponse(Uri uri, Action<Response> callback)
{
WebClient wc = new WebClient();
wc.OpenReadCompleted += (o, a) =>
{
if (callback != null)
{
DataContractJsonSerializer responseSerializer = new DataContractJsonSerializer(typeof(Response));
callback(responseSerializer.ReadObject(a.Result) as Response);
}
};
wc.OpenReadAsync(uri);
}
下面的方法使用GetResponse方法获取纬度:
public Lattitudes getLattitudes()
{
Lattitudes lattitudes = new Lattitudes();
GetResponse(geocodeRequestURI, (x) =>
{
lattitudes.SouthLatitude = x.ResourceSets[0].Resources[0].BoundingBox[0];
lattitudes.SouthLatitude = x.ResourceSets[0].Resources[0].BoundingBox[1];
lattitudes.SouthLatitude = x.ResourceSets[0].Resources[0].BoundingBox[2];
lattitudes.SouthLatitude = x.ResourceSets[0].Resources[0].BoundingBox[3];
});
return lattitudes;
}
我的问题是第二个方法返回空对象,而GetResponse方法中的一部分稍后要执行。 有没有办法等待此事件结束然后返回,或者我需要重新设计它?(我可以使用的.NET的最大版本为4.0)
我建议您是否要等待,而不是通过转换与async竞争的方法来利用Task并等待,如下所示
private async Task RequestDataAsync(string uri, Action<string> action)
{
var client = new WebClient();
string data = await client.OpenReadAsync(uri);
action(data);
}
代码中的调用方法
Task t = RequestDataAsync(parameter)
t.Wait();
此帮助更多: http : //www.dotnetperls.com/async
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.