2015-11-09 2 views
0

Я вызываю данные из службы 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; 
     } 
+0

Вы уверены, что это просто повесить или есть исключение, скрытое в фоновом режиме? вам нужно вызвать CheckAccess/BeginInvoke, когда вы хотите обновить свой элемент управления из фонового потока (т. Е. Combobox) – cscmh99

+0

Поведение 'await' по умолчанию возвращается к потоку, который называется методом async. Поэтому ему не нужно вызывать CheckAccess или так. @RGdent: Может ли быть что-то еще, блокирующее поток ui? Другой загруженный-обработчик или так? – christoph

+0

Нет никаких других загрузчиков вообще @christoph, это не только поле со списком, но и программа. –

ответ

0

код вы вывесили правильно и это не распространяется создать что щий блокирующее поведение (насколько я могу судить).

Убедитесь, что ничто иное не блокирует нить ui. Попробуйте его без вызова службы, чтобы узнать, все ли он блокирует его.

Вы можете использовать функцию прерывания Visual Studio, чтобы выполнить код запуска и узнать, где он находится.