WPF Background Worker Обновление пользовательского интерфейса и выборка данных - PullRequest
0 голосов
/ 05 октября 2019

У меня есть код (метод / функция), который извлекает данные с сервера и создает XAML. Код проходит цикл, поэтому выборка данных смешивается с кодом, который создает элементы пользовательского интерфейса.

Я хочу, чтобы основной поток оставался отзывчивым. Я знаю, что не могу обновить пользовательский интерфейс в «DoWork» без использования Dispatcher, но в нем много кода XAML. Можно ли как-то обернуть весь метод, используя Dispatacher и Delegate? Каков наилучший подход для достижения этой цели?

РЕДАКТИРОВАНИЕ / ОБНОВЛЕНИЕ Мне удалось отделить выборку данных от кода XAML. Мне просто нужно было создать еще несколько классов для временного хранения данных. Спасибо всем за ваши комментарии и предложения.

1 Ответ

0 голосов
/ 05 октября 2019

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

Тем временем вы можете разбить обрабатывающие части на куски и обновить пользовательский интерфейс вмежду.

Для операций ввода-вывода функции для их извлечения, вероятно, уже асинхронны, поэтому вы можете их ждать. Для операций с процессором вы можете заключить в Task.Run ()

например

public async Task ProcessData(...) {        
    for (DataSource source in DataSourceURIs) {
        Data data = await FetchDataAsync(source);
        //Update UI here
        ProcessedData processedData = await Task.Run(() => SomeCPUOperation(data));
        //Update UI herea
     }
}

https://www.pluralsight.com/guides/using-task-run-async-await

...