C# 如何等待异步(geocodeService.GeocodeAsync)服务/方法完成?

C# 如何等待异步(geocodeService.GeocodeAsync)服务/方法完成?,c#,windows-phone-7,gps,async-await,C#,Windows Phone 7,Gps,Async Await,我使用地理编码服务获取两个地方的纬度和经度(从、到) 我得到的纬度和经度非常完美,但我的问题是在调用(geocodeService.GeocodeAsync)之前显示消息(geocodeService\u GeocodeCompleted) 我的代码是 private void point_Click(object sender, RoutedEventArgs e) { getCoordinates(fromText.Text, 1);// this is calling after

我使用地理编码服务获取两个地方的
纬度
经度
(从、到)

我得到的纬度和经度非常完美,但我的问题是在调用(
geocodeService.GeocodeAsync
)之前显示消息(
geocodeService\u GeocodeCompleted

我的代码是

private void point_Click(object sender, RoutedEventArgs e)
{
    getCoordinates(fromText.Text, 1);// this is calling after bellow message box :(
    getCoordinates(toText.Text, 2);
    MessageBox.Show(" completed ");  // 1 why this message is displaying first before above calls      
}

private void getCoordinates(string address, int index)
    {
        GeocodeRequest geocodeRequest = new GeocodeRequest();

        // Set the credentials using a valid Bing Maps key
        geocodeRequest.Credentials = new Credentials();
        geocodeRequest.Credentials.ApplicationId = "ApgLkoHIG4rNShRJAxMMNettsv6SWs3eP8OchozFS89Vex7BRHsSbCr31HkvYK-d";

        // Set the full address query
        geocodeRequest.Query = address;

        // Set the options to only return high confidence results 
        FilterBase[] filters = new FilterBase[1];
        filters[0] = new ConfidenceFilter() { MinimumConfidence = Confidence.High };

        GeocodeOptions geocodeOptions = new GeocodeOptions();
        geocodeOptions.Filters = new ObservableCollection<FilterBase>(filters);
        geocodeRequest.Options = geocodeOptions;

        // Make the geocode request
        GeocodeServiceClient geocodeService = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService");
        geocodeService.GeocodeCompleted += new EventHandler<GeocodeCompletedEventArgs>(geocodeService_GeocodeCompleted);
        geocodeService.GeocodeAsync(geocodeRequest, index);

    }
    void geocodeService_GeocodeCompleted(object sender, GeocodeCompletedEventArgs e)
    {
            GeocodeResponse geocodeResponse = e.Result;
            fromLat = geocodeResponse.Results[0].Locations[0].Latitude;
            fromLon = geocodeResponse.Results[0].Locations[0].Longitude;
            Messagebox.Show("latitude : "+fromLat); // this is displaying randomly 
    }
private void point\u单击(对象发送者,路由目标)
{
getCoordinates(fromText.Text,1);//这是在下面的消息框之后调用的:(
getCoordinates(toText.Text,2);
MessageBox.Show(“completed”);//1为什么在上述调用之前先显示此消息
}
私有void getCoordinates(字符串地址,int索引)
{
GeocodeRequest GeocodeRequest=新的GeocodeRequest();
//使用有效的Bing映射密钥设置凭据
geocodeRequest.Credentials=新凭据();
geocodeRequest.Credentials.ApplicationId=“ApgLkoHIG4rNShRJAxMMNettsv6SWs3eP8OchozFS89Vex7BRHsSbCr31HkvYK-d”;
//设置完整地址查询
geocodeRequest.Query=地址;
//将选项设置为仅返回高置信度结果
FilterBase[]filters=新的FilterBase[1];
筛选器[0]=new ConfidenceFilter(){MinimumConfidence=Confidence.High};
GeocodeOptions GeocodeOptions=新的GeocodeOptions();
geocodeOptions.Filters=新的ObservableCollection(Filters);
geocodeRequest.Options=geocodeOptions;
//发出地理编码请求
GeocodeServiceClient geocodeService=新的GeocodeServiceClient(“BasicHttpBinding_IgeocDeservice”);
geocodeService.GeocodeCompleted+=新事件处理程序(geocodeService\u GeocodeCompleted);
geocodeService.GeocodeAsync(geocodeRequest,index);
}
void geocodeService\u GeocodeCompleted(对象发送方,GeocodeCompletedEventArgs e)
{
GeocodeResponse GeocodeResponse=e.结果;
fromLat=geocodeResponse.Results[0]。位置[0]。纬度;
fromLon=geocodeResponse.Results[0]。位置[0]。经度;
Messagebox.Show(“纬度:+fromLat);//这是随机显示的
}

创建另一种方法,在加载异步完成时激活计时器

把结果传给它

让timer.tick检查e.result是否为length>0

如果在勾选显示窗口上

否则会显示加载或什么

像这样的

#pretend code#
Global Variable -> string location;

getGeoLoc += new geoLocCompleted;

void geoLocCompleted(sender, e){
   location = e.result
   Timer time = new Timer():
   time.tick += OnTick;
}


你不能在WP7上使用C#5.0中的
async
-
wait
,不行吗?我怎么能做到这一点?为什么我的代码不按照方法调用的顺序(在poini#u点击事件中)?谢谢你的回答:)但是
geocodeService.GeocodeAsync
没有这个调用它就不会调用
eocodeCompleted
方法
void onTick(send, e){
   if(e.result.length > 0)
      Show your results
   else
      Show loading dialog
}