Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# 如何通过异步获取字符串并返回字符串?_C#_Windows Phone 8 - Fatal编程技术网

C# 如何通过异步获取字符串并返回字符串?

C# 如何通过异步获取字符串并返回字符串?,c#,windows-phone-8,C#,Windows Phone 8,我的代码如下: public void getCity() { ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery(); reverseGeocode.GeoCoordinate = new GeoCoordinate(10.79845, 106.65063); reverseGeocode.QueryCompleted += reverseGeocode_Que

我的代码如下:

    public void getCity()
    {
        ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery();
        reverseGeocode.GeoCoordinate = new GeoCoordinate(10.79845, 106.65063);
        reverseGeocode.QueryCompleted += reverseGeocode_QueryCompleted;
        reverseGeocode.QueryAsync();
    }

    private void reverseGeocode_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)
    {
        MapAddress geoAddress = e.Result[0].Information.Address;
    }
public void getCity()
{
ReverseGeocodeQuery reverseGeocode=新建ReverseGeocodeQuery();
reverseGeocode.GeoCoordinate=新的地理坐标(10.79845106.65063);
reverseGeocode.QueryCompleted+=reverseGeocode_QueryCompleted;
reverseGeocode.QueryAsync();
}
私有void reverseGeocode_QueryCompleted(对象发送方,QueryCompletedEventArgs e)
{
MapAddress geoAddress=e.Result[0]。Information.Address;
}
我需要在
getCity
方法中获取字符串
Address

但我不想处理查询何时完成以获取地址。我想在
getCity
方法中获取字符串
Address
,并返回地址。我想使用异步,但我不知道如何使用


请帮帮我。谢谢。

因为您要异步获取数据,所以需要使您的方法也异步。只需返回
Task
,并使用
TaskCompletionSource
创建任务

以下是您的做法:

public Task<MapAddress> GetCity()
{
    TaskCompletionSource<MapAddress> tcs = new TaskCompletionSource<MapAddress>();

    ReverseGeocodeQuery reverseGeocode = new ReverseGeocodeQuery();
    reverseGeocode.GeoCoordinate = new GeoCoordinate(10.79845, 106.65063);
    reverseGeocode.QueryCompleted += (sender, e)=> tcs.SetResult(e.Result[0].Information.Address);
    reverseGeocode.QueryAsync();

    return tcs.Task;
}

请告诉我如何获得任务GetCity()的回报?我使用任务temp=GetCity();但这是错误我很抱歉。我的意思是如何获取任务GetCity()的结果?更新了我的答案,查看该帮助是否在reverseGeocode.QueryCompleted+=(发件人,e)=>tcs.SetResult(e.result[0].Information.Address)处出错;System.ni.dll中出现“System.Reflection.TargetInvocationException”类型的异常,但未在用户代码中处理。请发布完整的异常详细信息、消息堆栈跟踪、内部异常等。使用这些详细信息编辑您的问题
private async void Something()
{
    MapAddress address = await GetCity();
}