0

非同期メソッドを使用する必要があることを開発しています。プログラムがそのメソッドの結果を待つために一時停止しないことはわかっています。しかし、私のプログラムが続行するには、そのメソッドの結果が必要です。では、そのメソッドの結果が得られるまでプログラムを一時停止するにはどうすればよいでしょうか? それ以外の場合は、非同期メソッドを含むプログラムを同期する必要があります。

これは私のコードです:

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() が終了するまで、プログラムを一時停止する必要があります。私はベトナム人なので、メソッド名は気にしないでください。笑

助けてくれてありがとう!

4

2 に答える 2

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;
    }
于 2013-10-27T04:56:45.657 に答える