У нас есть приложение, построенное в соответствии с шаблоном MVVM. В разное время мы запускаем задачи для перехода к базе данных для извлечения данных, затем мы заполняем ObservableCollection, с которым связан элемент управления WPF с этими данными.C#, MVVM, задачи и пользовательский интерфейс
Мы немного смущены, когда мы заполняем ObservableCollection, мы делаем это в потоке задачи, а не в потоке пользовательского интерфейса, но пользовательский интерфейс все еще обновляется/ведет себя правильно. Мы ожидали ошибки и должны были изменить код, чтобы заполнить коллекцию в потоке пользовательского интерфейса.
Является ли это опасным сценарием и все равно нужно заполнять нить пользовательского интерфейса?
код для получения данных:
Task.Factory.StartNew(() =>
UiDataProvider.RefreshForwardContractReport(fcrIdField.Value)
)
.ContinueWith(task => {
if (task.Result.OperationSuccess)
{
// This updates the ObseravableCollection, should it be run on UI thread??
RefreshReport(task.Result.OperationResult);
}
});
Если извлечение данных из БД занимает много времени, чем вы не должны делать это в потоке пользовательского интерфейса, так как оно будет блокировать или замораживать экран, который по сути не является хорошим пользователем -experience. Вы должны выполнить эту задачу в другом потоке. – Vishal
Простое решение. Проверьте поток, в котором вы находитесь. Нет никакой необходимости предполагать что-либо. – Will