我正在制作一个WPF应用程序,该应用程序只是从数据库中获取一些数据并显示出来。我已经将EntityFrameworkCore和Pomelo连接器用于mysql。 与数据库的连接可以正常工作,并且可以正确检索数据。问题是,即使我在await中使用异步方法,UI也会每次都阻塞。这是Click侦听器的代码
private async void BT_Click(object sender, RoutedEventArgs e)
{
var userTask = api.GetMyUserAsync();
Console.WriteLine("started task");
var users = await userTask;
Console.WriteLine(users.Name);
}
这是Api.cs中查询的代码:
public async Task<User> GetMyUserAsync()
{
return await context.User
.Where(u => u.Username == username && u.Password == password)
.FirstOrDefaultAsync();
}
我不知道为什么会这样。其他答案也建议使用此代码,但对我而言不起作用。
弗朗切斯科
答案 0 :(得分:0)
这不应该发生。 与await一起使用时,被声明为异步(带有Async后缀)的方法不应阻塞,您的代码应该可以正常工作。
您是否正在后台运行另一个查询? EF core doesn't support running multiple requests simultaneously(请参阅第一个警告)。 如果是这样,请尝试使所有查询一个一个地运行。
答案 1 :(得分:-1)
您从按钮单击事件中错误地调用了异步方法。应该是这样的:
await Task.Run(()=> api.GetMyUserAsync());
在这里查看答案:How to run and interact with an async Task from a WPF gui