powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Загрузка данных во вторичном потоке
2 сообщений из 2, страница 1 из 1
Загрузка данных во вторичном потоке
    #40084656
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все доброго дня.
Немного опишу, что хочу, что сделал и что не получается.
Есть таблица, вывожу в ней данные: ItemsSource="{Binding Items}".
Данные состоят из простых типов (строки, числа...) и ссылок на другие классы:
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
class SomeClass1
{
    public int Id {get; set;}
    public string Name {get;set;}
}
class SomeClass2
{
    public int Id {get; set;}
    public string Name {get;set;}
}
class Model
{
    public int Id {get;set;}
    public string Code {get;set;}
    public string Name {get;set;}
    public SomeClass1 Prop1 {get;set;}
    public SomeClass2 Prop2 {get;set;}
}
class ViewModel
{
   private Model Model {get;}
   public ViewModel(Model model)
   {
      Model = model;
   }

   // Далее описываю свойства модели с реализацией интерфейса INotifyPropertyChanged
}
class MainViewModel
{
     public ObservableCollection<ViewModel> Items {get;set;}
     
     // Данный метод заполняет Items
     private void SomeMethod()
     {
           // Метод GetItems имеет тип IEnumerable<Model>
           var items = DataProvider.GetItems();
           foreach(var item in items)
          {
               var viewModel = new ViewModel(item);
               
               // Хочу все поля класса ViewModel, что ссылаются на другие классы,  
               // заполнить во вторичном потоке, дабы не блокировать основной
               // Метод GetSomeClass1 имеет тип Task<SomeClass1>
               DataProvider.GetSomeClass1(item.Id).ContinueWith(t => viewModel.Prop1 = t.Result, TaskScheduler.FromCurrentSynchronizationContext());
               // Метод GetSomeClass2 имеет тип Task<SomeClass2>
               DataProvider.GetSomeClass2(item.Id).ContinueWith(t => viewModel.Prop2 = t.Result, TaskScheduler.FromCurrentSynchronizationContext());
               // Далее идут вызовы методов по аналогии с GetSomeClass1 и GetSomeClass2
               
               Items.Add(item);
          }
     }
}


Выше описал, что хочу и как реализовал. Проблема в следующем: множественный вызов методов типа GetSomeClass подвешивает основной поток. Т.е. у меня ничего не выводится в гриде, пока не отработают все таски. Очень нужна помощь: что не так делаю и как реализовать загрузку данных для части свойств класса в отдельном потоке?
...
Рейтинг: 0 / 0
Загрузка данных во вторичном потоке
    #40084711
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снимается, разобрался.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Загрузка данных во вторичном потоке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (16): Анонимы (14), Yandex Bot, Bing Bot 8 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]