在这里,我试图根据另一个组合框的选择加载一个组合框的项目。一旦选择了组合框项目,它就会生成一个httpwebrequest并返回一个字符串列表,这些字符串将用作另一个组合框的项目。但是,只要它调用Client.GetAsync,它就会将控件返回给Task.Result并永远等待。这里出了什么问题。
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)
您正在混合异步和同步通话。 Cmbbox_SelectionChanged
是一个事件处理程序,因此您可以一直使用async
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));
}