首页 > 解决方案 > 在加载对话框时在后台从数据库中检索数据

问题描述

我在 WPF 应用程序中使用 Dapper 从数据库中检索几个组合框列表的数据。我希望在后台进行检索;当用户打开第一个组合框时,它将防止出现小延迟。

所以我这样做了:

private Task<IEnumerable<T_Program>> _allTapes;

// Binds to combobox ItemsSource
public IEnumerable<T_Program> Tapes => 
   _allTapes.Result.Where(x => x.Program.Equals(Program));

在我的视图模型的构造函数中:

_allTapes = _conn.GetAllAsync<T_Program>();

但我没有得到我想要的“性能提升”。

在调试期间将光标悬停在上面会_allTapes产生以下描述:

Id = 6722, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"

所以看起来 Dapper 的GetAllAsync方法实际上并没有执行查询,直到它被Result从任务中检索强制执行。

如何获得我想要的后台执行?

标签: c#wpfasync-awaittaskdapper

解决方案


您当前只是将 Task 对象分配给 _allTapes。

尝试

_allTapes = await _conn.GetAllAsync<T_Program>().ConfigureAwait(false);

推荐阅读