2013-10-27 56 views
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()完成。 不要擔心方法名稱,因爲我是越南人。 LOL

非常感謝你對我的幫助!

+0

你爲什麼要暫停程序以等待** **異步任務?你不妨做一個**同步**任務。 – JosephGarrone

+0

當然,我不想使用異步方法。但是這種方法GetGeopositionAsync()是一種異步方法。^_^ –

+0

你不應該像在Windows Phone平臺上那樣阻止UI線程。相反,設計您的用戶界面,以便在操作正在進行時顯示某些內容(「正在加載...」或其他內容),並在操作完成時將其轉換爲正常狀態。 –

回答

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

調用函數應該工作時使用的await。

嘗試

await DiaChiGanNhat(); 

務必閱讀下面的評論。

+0

不能等待void類型的'async'方法。爲此,在DiaChiGanNhat()方法中使用'Task'而不是'void'。 –

相關問題