任务没有返回并在WPF中永远等待结果

时间:2016-07-28 02:28:19

标签: c# wpf combobox

在这里,我试图根据另一个组合框的选择加载一个组合框的项目。一旦选择了组合框项目,它就会生成一个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;

        }

1 个答案:

答案 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));
}