2016-07-28 5 views
-2

Hier versuche ich, die Elemente einer Combobox basierend auf der Auswahl einer anderen Combobox zu laden. Sobald ein Combobox-Element ausgewählt ist, erstellt es eine httpwebrequest und gibt eine Liste von Zeichenfolgen zurück, die als Elemente für eine andere Combobox verwendet werden. Aber sobald es Client.GetAsync aufruft, wird das Steuerelement wieder an Task.Result zurückgegeben und wartet dort für immer. Was läuft hier falsch?Aufgabe nicht zurück und warten auf Ergebnis für immer in 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

ich Sie haben lange genug gewartet nicht denken können „für immer“ ganz noch zu sagen ... –

+0

Siehe auch http://stackoverflow.com/ Fragen/17706841/Thread-Blockierung-der-UI –

Antwort

0

Sie mischen Async- und Sync-Anrufe. Cmbbox_SelectionChanged ist ein Event-Handler, so dass Sie async den ganzen Weg durch

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)); 
} 
Verwandte Themen