Я вызываю данные из службы WCF и заполняя поле со списком в своем приложении WPF. Как только я перейду к расположению окна Combo, страница замерзает, или иногда я могу открыть поле со списком, но затем он также зависает?WPF Combo box Unresponsive
WPF
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
using (TruckServiceClient TSC = new TruckServiceClient())
{
await LoadPhase(TSC, cmbtest);
}
private async Task LoadPhase (TruckServiceClient TSC, ComboBox combobox)
{
List<Phasetems> phasetems = new List<Phasetems>();
foreach (var item in await TSC.GetphaseAsync())
phasetems.Add(new Phasetems { Phase = item.Phase });
combobox.ItemsSource = (phasetems.ToArray());
combobox.IsEnabled = true;
combobox.SelectedIndex = 1;
}
public class Phasetems
{
public int Id { get; set; }
public string Phase { get; set; }
public override string ToString()
{
return Phase;
}
}
WCF
public List<RPhases> Getphase()
{
List<RPhases> phases = new List<RPhases>();
List<RPhases> dbphase;
using (TruckDb db = new TruckDb())
dbphase = db.RPhases.Where(x => x.Id != null).ToList();
foreach (var a in dbphase)
{
var items = new RPhases
{
Id = a.Id,
Phase = a.Phase
};
phases.Add(items);
}
return phases;
}
Вы уверены, что это просто повесить или есть исключение, скрытое в фоновом режиме? вам нужно вызвать CheckAccess/BeginInvoke, когда вы хотите обновить свой элемент управления из фонового потока (т. Е. Combobox) – cscmh99
Поведение 'await' по умолчанию возвращается к потоку, который называется методом async. Поэтому ему не нужно вызывать CheckAccess или так. @RGdent: Может ли быть что-то еще, блокирующее поток ui? Другой загруженный-обработчик или так? – christoph
Нет никаких других загрузчиков вообще @christoph, это не только поле со списком, но и программа. –