2016-07-28 78 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)); 
} 
相关问题