2016-07-28 93 views
-2

在這裏,我試圖根據另一個組合框的選擇加載一個組合框的項目。一旦選擇了組合框項目,它將生成一個httpwebrequest並返回一個字符串列表,這些字符串將用作另一個組合框的項目。但是,只要它調用Client.GetAsync,它就會將控件返回到Task.Result並永遠等待。這裏出了什麼問題。任務不會返回並永遠在WPF中等待結果

private void Cmbbox_SelectionChanged(object sender, SelectionChangedEventArgs e) 

{ 

      var task = GetData(cmbBx.SelectedValue.ToString()); 
      var result = task.Result; 
      _Items= result; 

      if(_Items!=null&&_Items.Count>0) 
      _Items.ForEach(item=> 2ndcmbx.Items.Add(item)); 

} 

     internal async Task<List<string>> GetData(string Selected) 
     { 

      var client = new HttpClient(); 

      HttpResponseMessage response = await client.GetAsync(new Uri(Url)); 
      List<Temp1> tempList =null; 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       string jsonString = await response.Content.ReadAsStringAsync(); 

       TempList= Newtonsoft.Json.JsonConvert.DeserializeObject<List<Temp1>>(jsonString); 

      } 
      if (TempList== null || TempList.Count == 0) 
       return null; 
      var _ComboBoxItemList= TempList.Select(e => e.facilityName).ToList(); 
      return _ComboBoxItemList; 

     } 
+0

我不認爲你已經等了很久說「永遠」相當,但... –

+0

也http://stackoverflow.com/見問題/ 17706841 /線程阻塞最UI –

回答

0

你混合異步和同步調用。 Cmbbox_SelectionChanged是事件處理程序,因此您可以異步一路使用通過

private async void Cmbbox_SelectionChanged(object sender, SelectionChangedEventArgs e) { 
    var result = await GetData(cmbBx.SelectedValue.ToString()); 
    _Items= result; 

    if(_Items!=null&&_Items.Count>0) 
    _Items.ForEach(item=> 2ndcmbx.Items.Add(item)); 
} 
相關問題