Получить результат выполнения Task без зависания окна - C#

Узнай цену своей работы

Формулировка задачи:

У меня у окна есть метод Initialize(), который должен запускать поток, внутри которого формируется массив и возвращается для заполнения элемента на окне. Поток должен создаваться классом Task. Пока выполняется поток окошко должно становиться не доступным (метод m.HideMePls()), а по завершению потока вновь становиться доступным (m.UnhideMe()). Проблема в том, что я не знаю как получить значения из потока без зависания основного потока. Например у BackgroundWorker есть событие по завершению потока, а как здесь обходиться не могу понять. Код:
Листинг программы
  1. public void Initialize()
  2. {
  3. Task<object> task = new Task<object>(() => Work());
  4. var m = (MainViewModel)App.Current.MainWindow.DataContext;
  5. m.HideMePls();
  6. task.Start();
  7. MyItemSource = (ObservableCollection<object>)task.Result;
  8. m.UnhideMe();
  9. }
  10. static object Work()
  11. {
  12. CBRServiceManager cbrManager = new CBRServiceManager();
  13. ObservableCollection<object> result = new ObservableCollection<object>();
  14. foreach (string s in cbrManager.GetCurrencyList())
  15. {
  16. result.Add(new ListCurrencyItem() { Name = s.Trim() });
  17. }
  18. return result;
  19. }

Решение задачи: «Получить результат выполнения Task без зависания окна»

textual
Листинг программы
  1. public async void Initialize(){
  2.     MyItemSource = (ObservableCollection<object>)(await task);
  3. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы