gpt4 book ai didi

c# - Entity Framework SaveChangesAsync 阻塞了我的 UI?

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:38 26 4
gpt4 key购买 nike

private async void button4_Click(object sender, EventArgs e)
{
try
{
MyDbContext context = new MyDbContext();

for (int i = 0; i < 10000; i++)
{
context.Table1.Add(new Table1() { Name = "jon" + i});
}

await context.SaveChangesAsync();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}
}

在此代码中,context.SaveChangesAsync 阻止我的 UI,直到将所有记录保存在数据库中。为什么会这样?我该如何解决?

更新:

private async void button9_Click(object sender, EventArgs e)
{
try
{
MyDbContext context = new MyDbContext();

for (int i = 0; i < 10000; i++)
{
context.Table1.Add(new Table1() { Name = "jon" + i });
}
MessageBox.Show("Start");
await Task.Delay(20000);
MessageBox.Show("End");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}
}

为什么在上面的代码中 UI 直到延迟结束才阻塞?但是在之前的代码中UI被屏蔽了?

最佳答案

await 行上方的代码导致了问题。

试试这个:

private async void button4_Click(object sender, EventArgs e)
{
try
{
await Task.Run(() =>
{
MyDbContext context = new MyDbContext();

for (int i = 0; i < 10000; i++)
{
context.Table1.Add(new Table1() { Name = "jon" + i });
}

await context.SaveChangesAsync();
});
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}
}

这将使所有代码异步运行,并且不应再阻塞 UI。您可以尝试调试 for loopMyDbContext 行,看看为什么它们花费的时间比应有的多。

关于c# - Entity Framework SaveChangesAsync 阻塞了我的 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33605961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com