Я недавно пытался изучить процесс использования Task в WPF и столкнулся с проблемой, которая, скорее всего, объясняется нехваткой опыта. При выполнении асинхронного вызова метода dataservice «GetFutureWork» поток пользовательского интерфейса становится невосприимчивым. Код можно увидеть ниже. Обратите внимание, что в этом проекте используется MVVM, а переменная «WorkList» - это просто наблюдаемая коллекция, используемая для моего источника itemListiview.Пользовательский интерфейс блокировки задач в WPF
private async void LoadWork()
{
WorkList = await _dataService.GetFutureWork("UserNameHere");
}
DataService Задача
public async Task<IEnumerable<FutureWork>> GetFutureWork(string userName)
{
using (_db = new DataEntities())
{
var workList = await (from items in _db.REPAIR_CHECK_IN_TABLEs
where items.LOCATION == userName && items.COMPLETED == "N"
select new FutureWork
{
FormattedDate = items.EstShipDate.ToString(),
ServiceID = items.SERVICE_ID,
ImagePath = @"\\192.168.5.50\photos$\" + items.SERVICE_ID + "P1.bmp",
Priority = items.PRIORITY
}).ToListAsync();
return workList;
}
}
Вызывается ли 'LoadWork()' из потока пользовательского интерфейса? Что вызывает этот метод? Сколько времени занимает конструктор 'DataEntities'? В нем что-то особенное? –
Да LoadWork вызывается из потока пользовательского интерфейса. Он вызывается из конструктора viewmodel. 'public FutureWorkViewModel (IDataService dataService) { _dataService = dataService; LoadWork(); } 'Конструктор данных состоит из 145 мс, поэтому я чувствую, что это может не быть виноватым. – HighARc
вам нужно подождать LoadWork(); также – axlj