Продолжить с изменением порядка в моем списке - PullRequest
0 голосов
/ 03 июня 2018

У меня есть список информации. Каждая из этих сведений должна находиться в пользовательском элементе управления. Создание пользовательского элемента управления занимает много времени. Пользовательский интерфейс зависает, поэтому я использовал Task.Delay.ContinuWith () (Для обновления пользовательского интерфейса последобавление любого элемента)
Но есть проблема, информация не отображается в последовательности

Dispatcher.Invoke(new Action(() =>
            {
                waterfallFlow.Children.Clear();
                    var parsedValues = doc.DocumentNode.SelectNodes(...).Skip(1)
                         .Select(r =>
                         {...}).ToList();
                    foreach (var item in parsedValues)
                    {
                        Task.Delay(200).ContinueWith(ctx =>
                        {
                            waterfallFlow.Children.Add(_currentUser);
                            waterfallFlow.Refresh();
                        }, TaskScheduler.FromCurrentSynchronizationContext());
                    }
                }
            }), DispatcherPriority.ContextIdle, null);

Вывод:

ID |Имя |

10 |Али
9 |Хади
1 |Хасан
15 |kajsd
...
Но информацию следует получать следующим образом

ID |Имя |

1 |Хасан
2 |объявление
2 |объявление
3 |объявление
...

1 Ответ

0 голосов
/ 03 июня 2018

Подумайте об использовании Dispatcher.Invoke<TResult> с перегрузкой и просто ожидайте Task

Dispatcher.Invoke<Task>(async () => {
    waterfallFlow.Children.Clear();
    var parsedValues = doc.DocumentNode.SelectNodes(...)
        .Skip(1)
        .Select(r => {...})
        .ToList();
    foreach (var item in parsedValues) {
        await Task.Delay(200);
        waterfallFlow.Children.Add(item);
        waterfallFlow.Refresh();
    }
}, DispatcherPriority.ContextIdle, null);

, это позволит добавить элементы в том же порядке, в котором они были прочитаны.

...