我正在开发使用异步方法的需求。我知道我的程序不会暂停等待该方法的结果。但我的程序必须继续使用该方法的结果。那么,在获得该方法的结果之前,如何暂停我的程序?否则,我需要同步包含异步方法的程序。
这是我的代码:
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;
}
这是我的问题。我必须暂停我的程序,直到方法DiaChiGanNhat()完成。 不要担心方法名称,因为我是越南人。 LOL
非常感谢你帮助我!
答案 0 :(得分:0)
您可以使用Wait
尝试此操作,该方法将阻止该方法直至完成:
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;
}
答案 1 :(得分:0)
调用函数时使用await应该有效。
尝试
await DiaChiGanNhat();
请阅读以下评论。