WPF中的任务锁定UI
本文关键字:锁定 UI 任务 WPF | 更新日期: 2023-09-27 18:29:29
我最近一直在尝试学习在WPF中使用Task的过程,但遇到了一个障碍,很可能是因为我缺乏经验。当执行对我的数据服务方法"GetFutureWork"的异步调用时,UI线程变得没有响应。代码如下所示。注意,这个项目使用MVVM,变量"WorkList"只是一个可观察的集合,用于我的listiview的项目源。
private async void LoadWork()
{
WorkList = await _dataService.GetFutureWork("UserNameHere");
}
数据服务任务
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模式,这里会发布一个替代解决方案。