Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ReverseGeocodeQuery中的异常_C#_Windows Phone 8_Windows Phone_Reverse Geocoding - Fatal编程技术网

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

这样,直到上一个任务完成后才进行呼叫。这种方法的缺点是,如果我们有很多地方,可能会花费太长时间。

谢谢!!这是有史以来最令人惊讶的答案之一!非常感谢。这是有史以来最令人惊讶的答案之一!