У меня есть форма, содержащая 4 вида сетки. Я хотел бы заполнить эти виды сетки объектами, которые я запрашиваю, благодаря Entity Framework. Проблема в том, что пользовательский интерфейс застревает во время загрузки. Таким образом, я попытался сделать запрос асинхронным, но он не работает. Я пытался сделать это несколькими способами, но мое текущее решение выглядит так
private async void SwiftCheck_Load(object sender, EventArgs e)
{
radGridViewLast7Days.DataSource = await MonitoringToolCore.SwiftQueries.ReturnLast7DaysAsync();
radGridViewAmount.DataSource = await MonitoringToolCore.SwiftQueries.CompareAmountsAsync();
radGridViewAmountBySwift.DataSource = await MonitoringToolCore.SwiftQueries.CompareAmountsByTypeAsync();
radGridViewAmountBySender.DataSource = await MonitoringToolCore.SwiftQueries.CompareAmountsBySenderAsync();
//Code to adapt the gridviews layout after data has been bound
this.radGridViewAmountBySender.BestFitColumns();
}
Я связываю данные в событии загрузки, потому что, насколько я понимаю, я не могу использовать await в конструкторе.
Затем я использую await для каждой задачи, потому что Entity Framework не является потокобезопасным. Так что, если я правильно понял, я не могу запустить каждую задачу одновременно, а потом ждать их всех?
Это один из кодов, который возвращает список объектов
public static async Task<List<MsMessage>> ReturnLast7DaysAsync()
{
DateTime currentDate = DateTime.UtcNow.Date.AddDays(-7);
using (var db = new SveulumeContext())
{
var query = db.MsMessages
.Where(u => u.Created >= currentDate);
return await query.ToListAsync();
}
}
Код работает и правильно связывает gridViews, но пользовательский интерфейс все еще блокируется в течение всего процесса. Что я делаю не так?