Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
8 / 8 / 2
Регистрация: 14.01.2012
Сообщений: 60
1

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

31.03.2017, 15:42. Показов 978. Ответов 1
Метки нет (Все метки)

У меня у окна есть метод Initialize(), который должен запускать поток, внутри которого формируется массив и возвращается для заполнения элемента на окне. Поток должен создаваться классом Task. Пока выполняется поток окошко должно становиться не доступным (метод m.HideMePls()), а по завершению потока вновь становиться доступным (m.UnhideMe()). Проблема в том, что я не знаю как получить значения из потока без зависания основного потока. Например у BackgroundWorker есть событие по завершению потока, а как здесь обходиться не могу понять.

Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void Initialize()
        {
            Task<object> task = new Task<object>(() => Work()); 
 
            var m = (MainViewModel)App.Current.MainWindow.DataContext;
            m.HideMePls();
            task.Start();
 
            MyItemSource = (ObservableCollection<object>)task.Result;
            m.UnhideMe();
        }
 
        static object Work()
        {
 
            CBRServiceManager cbrManager = new CBRServiceManager();
            ObservableCollection<object> result = new ObservableCollection<object>();
            foreach (string s in cbrManager.GetCurrencyList())
            {
                result.Add(new ListCurrencyItem() { Name = s.Trim() });
            }
            return result;
 
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2017, 15:42
Ответы с готовыми решениями:

Как запускать несколько Task без зависания?
Всем привет! Возник такой вот вопрос, как создать Tasks как им пользоваться и как запускать...

Дождаться выполнения Task без Thread.Sleep?
using System; public class Test { public static void Main() { Console.WriteLine(&quot;1&quot;);...

Excel. Получить результат выполнения формулы в ячейке
Здравствуйте. Проблема заключается в том, что в ячейке таблицы Excel хранится формула и через ...

Работа с Excel: как получить результат выполнения формулы
Добрый день. Подскажите как получить результат выполнения формулы .Изначально есть лист с данными ...

1
138 / 138 / 53
Регистрация: 14.06.2016
Сообщений: 467
31.03.2017, 20:44 2
C#
1
2
3
public async void Initialize(){
    MyItemSource = (ObservableCollection<object>)(await task);
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2017, 20:44

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

Как по правильному заполнить ListBox без зависания окна?
Есть кнопка, если listbox. В текущей реализации при нажатии на кнопку блокируется главный поток,...

Получить результат выполнения скриптов из IE
Добрый день, коллеги. Облазил миллион форумов в т.ч. иноязычных, и совсем отчаялся получить...

Получить результат выполнения JavaScript'a
Доброго времени суток, есть сайт, на котором всего одна кнопка и несколько textbox'ов. В OnClick...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.