我请等待表单,以便每次拨打数据库时向用户显示。我不知道为什么但实体框架阻止异步方法上的UI线程。这是我的代码:
private async void button_click(object sender, EventArgs e)
{
var formLoading = new FormLoading("Loading data, please wait"));
formLoading.Show(this);
var list = await context.Set<Foo>().ToListAsync().ConfigureAwait(false);
formLoading.Close();
//....
}
当实体框架正在进行数据库调用时,ui不会刷新并且我的加载表单被冻结。不过,如果我在DB调用之前创建一个Task.Delay,或者将代码放在Task.Run中,那就完美了。
private async void button_click(object sender, EventArgs e)
{
var formLoading = new FormLoading("Loading data, please wait"));
formLoading.Show(this);
await Task.Delay(1).ConfigureAwait(false);
var list = await context.Set<Foo>().ToListAsync().ConfigureAwait(false);
formLoading.Close();
//....
}
这段代码也很完美
private async void button_click(object sender, EventArgs e)
{
var formLoading = new FormLoading("Loading data, please wait"));
formLoading.Show(this);
IList<Foo> list;
await Task.Run(() =>
{
list = context.Set<Foo>().ToList();
});
formLoading.Close();
//....
}