2014-03-17 3 views
1

У меня есть код, как показано ниже:Как получить строку и вернуть строку async?

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

Мне нужно, чтобы получить строку Address в getCity метода.

Но я не хочу обрабатывать, когда запрос завершен, чтобы получить адрес. Я хочу получить строку Address по адресу getCity метод и адрес возврата. Я думаю использовать async, но я не знаю, как использовать.

Пожалуйста, помогите мне. Благодарю.

ответ

2

Поскольку вы получаете данные async, вам необходимо сделать ваш метод также асинхронным. Просто верните Task<MapAddress> и для создания задачи используйте TaskCompletionSource<MapAddress>.

Вот как вы идете:

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

Вы, наверное, нужен метод асинхронной назвать это. ?

private async void Something() 
{ 
    MapAddress address = await GetCity(); 
} 
+0

пожалуйста, сообщите мне, как получить отдачу от целевой GetCity() Я использую Task темп = GetCity(); но это ошибка – user3409461

+0

Какая ошибка? Опубликовать ошибку pls –

+0

Прошу прощения. Я имею в виду, как получить результат по задаче GetCity()? – user3409461

Смежные вопросы