Asynchronous 如何暂停程序直到得到异步方法的结果?

Asynchronous 如何暂停程序直到得到异步方法的结果?,asynchronous,windows-phone-8,Asynchronous,Windows Phone 8,我正在开发一种需要使用异步方法的方法。我知道我的程序不会暂停等待该方法的结果。但我的程序必须有该方法的结果才能继续。那么,我如何暂停程序直到得到该方法的结果呢?否则,我需要同步一个包含异步方法的程序 这是我的代码: private async void DiaChiGanNhat() { double kc; Geolocator myGeolocator = new Geolocator(); Geoposition myGeoposi

我正在开发一种需要使用异步方法的方法。我知道我的程序不会暂停等待该方法的结果。但我的程序必须有该方法的结果才能继续。那么,我如何暂停程序直到得到该方法的结果呢?否则,我需要同步一个包含异步方法的程序

这是我的代码:

private async void DiaChiGanNhat()
    {
        double kc;

        Geolocator myGeolocator = new Geolocator();
        Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
        Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
        GeoCoordinate myGeoCoordinate = ConvertGeocoordinate(myGeocoordinate);

        IList<DiaChi> dc = dc_control.LocTheoTheLoai(TheLoai(txtTimKiem.Text));
        for (int i = 0; i < dc.Count; i++)
        {
            kc = TinhKhoangCach(myGeoCoordinate.Longitude, myGeoCoordinate.Latitude, dc[i].KinhDo, dc[i].ViDo);
            distance[i] = kc;
        }

        //sap xep tang dan ve khoang cach va ID
        for (int i = 0; i < distance.Length; i++)
        {
            if (distance[i] > distance[i + 1])
            {
                double tg1 = distance[i];
                distance[i] = distance[i + 1];
                distance[i + 1] = tg1;

                int tg2 = id[i];
                id[i] = id[i + 1];
                id[i + 1] = tg2;
            }
        }
    }
private void bttTimKiem_Click(object sender, RoutedEventArgs e)
    {
        DiaChiGanNhat();
        IList<DiaChi> addr1 = dc_control.LocTheoID(id[0]);
        txtDiaChi1.Text = addr1[0].TenDiaChi;

        IList<DiaChi> addr2 = dc_control.LocTheoID(id[1]);
        txtDiaChi2.Text = addr2[0].TenDiaChi;

        IList<DiaChi> addr3 = dc_control.LocTheoID(id[2]);
        txtDiaChi3.Text = addr3[0].TenDiaChi;
    }
private async void DiaChiGanNhat()
{
双kc;
Geolocator myGeolocator=新的Geolocator();
Geoposition myGeoposition=等待myGeolocator.GetGeopositionAsync();
Geocoordinate myGeocoordinate=我的地理位置坐标;
地理坐标myGeoCoordinate=转换地理坐标(myGeoCoordinate);
IList dc=dc_control.LocTheoTheLoai(TheLoai(txtTimKiem.Text));
for(int i=0;i距离[i+1])
{
双tg1=距离[i];
距离[i]=距离[i+1];
距离[i+1]=tg1;
int tg2=id[i];
id[i]=id[i+1];
id[i+1]=tg2;
}
}
}
私有无效bttTimKiem_单击(对象发送者,路由目标e)
{
DiaChiGanNhat();
IList addr1=dc_control.locheoid(id[0]);
txtDiaChi1.Text=addr1[0].TenDiaChi;
IList addr2=dc_控制LOCHEOID(id[1]);
txtDiaChi2.Text=addr2[0].TenDiaChi;
IList addr3=dc_控制LocTheoID(id[2]);
txtDiaChi3.Text=addr3[0].TenDiaChi;
}
那是我的问题。我必须暂停程序,直到方法DiaChiGanNhat()完成。 不用担心方法名,因为我是越南人。哈哈


非常感谢你帮助我

您可以使用
等待
尝试此方法,该等待将阻止该方法,直到完成:

private void bttTimKiem_Click(object sender, RoutedEventArgs e)
    {
        var task = Task.Factory.StartNew(DiaChiGanNhat);
        task.Wait();  

        IList<DiaChi> addr1 = dc_control.LocTheoID(id[0]);
        txtDiaChi1.Text = addr1[0].TenDiaChi;

        IList<DiaChi> addr2 = dc_control.LocTheoID(id[1]);
        txtDiaChi2.Text = addr2[0].TenDiaChi;

        IList<DiaChi> addr3 = dc_control.LocTheoID(id[2]);
        txtDiaChi3.Text = addr3[0].TenDiaChi;
    }
private void bttTimKiem\u单击(对象发送方,路由目标)
{
var task=task.Factory.StartNew(DiaChiGanNhat);
task.Wait();
IList addr1=dc_control.locheoid(id[0]);
txtDiaChi1.Text=addr1[0].TenDiaChi;
IList addr2=dc_控制LOCHEOID(id[1]);
txtDiaChi2.Text=addr2[0].TenDiaChi;
IList addr3=dc_控制LocTheoID(id[2]);
txtDiaChi3.Text=addr3[0].TenDiaChi;
}

调用函数时使用wait应该可以工作

试一试


请阅读下面的评论。

为什么要暂停程序以等待异步任务?当然,我不想使用异步方法。但是这个方法GetGeopositionAsync()是一个异步方法^_^在Windows Phone平台上,不应该像那样阻止UI线程。相反,请设计UI,使其在操作进行时显示某些内容(“加载…”或其他内容),并在操作完成时将其转换为正常状态。我只是有一个想法,我不需要使用此方法。只需单击地图,然后获取该点的坐标。不错^_^<不能等待类型为void的代码>异步方法。为此,请在
DiaChiGanNhat()
方法上使用
Task
而不是
void
await DiaChiGanNhat();