最近,我一直在尝试学习在WPF中使用Task的过程,但遇到了麻烦,这很可能是由于我缺乏经验。当执行对我的数据服务方法“GetFutureWork”的异步调用时,UI线程将无响应。该代码可以在下面看到。请注意,该项目使用MVVM,变量“WorkList”只是用于listiview的itemsource的可观察的集合。
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;
}
}
最佳答案
您不能从窗口构造函数中调用异步函数,因此正如其他人提到的那样,您将需要另一种方法。
您可以使用Window_Loaded事件代替构造函数。
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
await LoadWork();
}
然后将其连接:
<Window x:Class="AsyncWindow.MainWindow" ... Loaded="Window_Loaded">
编辑:
如果您希望坚持使用MVVM模式,请在here上发布替代解决方案。