所以基本上,我正在创建一个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)
答案 0 :(得分:3)
我建议您是否要等待使用Task转换方法与async竞争,并等待如下所示
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();