C# ReverseGeocodeQuery中的异常
我正在使用C# ReverseGeocodeQuery中的异常,c#,windows-phone-8,windows-phone,reverse-geocoding,C#,Windows Phone 8,Windows Phone,Reverse Geocoding,我正在使用ReverseGeocodeQuery检索许多位置的地址。问题是,我得到了一个例外A,结果显示以下消息: 来自HRESULT的异常:0x80041B57 查看MSDN中的引用,我可以看到它在可能的错误结果中列出,符号代码为eerrorndexfailure。但是,它没有给我更多关于错误的信息,StackTrace也是空的 我的代码如下: foreach (var ev in events) { ReverseGeocodeQuery query = new ReverseGeo
ReverseGeocodeQuery
检索许多位置的地址。问题是,我得到了一个例外A,结果显示以下消息:
来自HRESULT的异常:0x80041B57
查看MSDN中的引用,我可以看到它在可能的错误结果中列出,符号代码为eerrorndexfailure
。但是,它没有给我更多关于错误的信息,StackTrace也是空的
我的代码如下:
foreach (var ev in events)
{
ReverseGeocodeQuery query = new ReverseGeocodeQuery();
query.GeoCoordinate = ev.Location;
query.QueryCompleted += (s, e)=>
{
if (e.Error != null)
return;
ev.city = e.Result[0].Information.Address.City;
};
query.QueryAsync();
}
为什么我会遇到这个错误,我如何才能做到这一点?显然,api有点有限,不可能同时进行多个
ReverseGeocodeQuery
调用
为了使它们逐个遵循异步/等待模式,我实现了一个扩展方法:
public static Task<T> ExecuteAsync<T>(this Query<T> query)
{
var taskSource = new TaskCompletionSource<T>();
EventHandler<QueryCompletedEventArgs<T>> handler = null;
handler = (s, e) =>
{
query.QueryCompleted -= handler;
if (e.Cancelled)
taskSource.SetCanceled();
else if (e.Error != null)
taskSource.SetException(e.Error);
else
taskSource.SetResult(e.Result);
};
query.QueryCompleted += handler;
query.QueryAsync();
return taskSource.Task;
}
这样,直到上一个任务完成后才进行呼叫。这种方法的缺点是,如果我们有很多地方,它可能会花费太长时间。显然,api有点有限,不可能同时进行多个
ReverseGeocodeQuery
调用
为了使它们逐个遵循异步/等待模式,我实现了一个扩展方法:
public static Task<T> ExecuteAsync<T>(this Query<T> query)
{
var taskSource = new TaskCompletionSource<T>();
EventHandler<QueryCompletedEventArgs<T>> handler = null;
handler = (s, e) =>
{
query.QueryCompleted -= handler;
if (e.Cancelled)
taskSource.SetCanceled();
else if (e.Error != null)
taskSource.SetException(e.Error);
else
taskSource.SetResult(e.Result);
};
query.QueryCompleted += handler;
query.QueryAsync();
return taskSource.Task;
}
这样,直到上一个任务完成后才进行呼叫。这种方法的缺点是,如果我们有很多地方,可能会花费太长时间。谢谢!!这是有史以来最令人惊讶的答案之一!非常感谢。这是有史以来最令人惊讶的答案之一!