ReverseGeocodeQuery中的异常

时间:2013-07-22 09:39:29

标签: c# windows-phone-8 windows-phone reverse-geocoding

我正在使用ReverseGeocodeQuery来检索许多位置的地址。问题是我得到了一个例外,结果如下:

  

HRESULT的异常:0x80041B57

看一下MSDN中的ReverseGeocodeQuery Class引用,我可以看到它列在可能的错误结果中,符号代码为EErrorIndexFailure。但是,它没有给我更多关于错误的信息,StackTrace也是null。

我的代码如下:

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();
}

为什么我会收到此错误,我该怎么做?

1 个答案:

答案 0 :(得分:5)

显然,api有点受限,无法同时进行多次ReverseGeocodeQuery来电。

为了在 async / await 模式之后逐个创建它们,我实现了一个扩展方法:

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;
}

然后,我修改了我的代码,以下列方式执行查询:

foreach (var ev in events)
{
    ReverseGeocodeQuery query = new ReverseGeocodeQuery();
    query.GeoCoordinate = ev.Location;
    var result = await query.ExecuteAsync();
    ev.city = result[0].Information.Address.City;
}

这样,在前一个完成之前不会进行呼叫。这种方法的缺点是如果我们有很多地方可能需要很长时间。