最近,我一直在尝试学习在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上发布替代解决方案。

10-08 12:14