[英]Async task didn't run - c#
btnSave Event: in this event i wana update datagridview but it's not working:( btnSave 事件:在这个事件中我想更新 datagridview 但它不工作:(
private async void btnSave_Click(object sender, EventArgs e)
{
if (this.ValidateChildren(ValidationConstraints.Enabled))
{
Remember remember = new Remember();
remember.RememberTitle = txtTitle.Text;
remember.RememberDate = dateTimePickerRememberDate.Value.Date;
remember.RememberTime = dateTimePickerRememberTime.Value.TimeOfDay;
remember.RememberContent = txtDescription.Text;
remember.RememberTransaction = false;
remember.RememberExpire = false;
var res = await Rep_App.NewRemember(remember).ConfigureAwait(false);
if (res)
{
MessageBox.Show("Success");
//this line did not executed
await GetRemembers();
}
else
{
MessageBox.Show("...");
}
}
}
GetRemember method:获取记忆方法:
private async Task GetRemembers()
{
try
{
// Instantiate a new DBContext
ParkingManager.Context.DataBaseContext dbContext = new ParkingManager.Context.DataBaseContext(PublicVariables.ConnectionString);
// Call the LoadAsync method to asynchronously get the data for the given DbSet from the database.
await dbContext.Remembers.LoadAsync().ContinueWith(loadTask =>
{
// Bind data to control when loading complete
remembersBindingSource.DataSource = dbContext.Remembers.ToList();
}, System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext());
}
catch (InvalidOperationException)
{
return;
}
catch (Exception)
{
MessageBox.Show(MessagesStruct.Exception);
}
}
GetRemember() did not execute in Save Event but when the form loaded GetRemember() executed completely, what's wrong? GetRemember() 没有在 Save Event 中执行,但是当表单加载时 GetRemember() 完全执行,这是怎么回事?
The problem is caused by ConfigureAwait(false)
and ContinueWith
.问题是由ConfigureAwait(false)
和ContinueWith
引起的。 ConfigureAwait(false)
will cause execution to continue on a background thread instead of getting back to the UI. ConfigureAwait(false)
将导致在后台线程上继续执行,而不是返回到 UI。 LoadAsync
isn't needed either, the data will be loaded by ToList
or ToListAsync()
.也不需要LoadAsync
,数据将由ToList
或ToListAsync()
加载。
EF Core and async/await don't need so much code. EF Core 和 async/await 不需要那么多代码。 All of this can be replaced with所有这些都可以替换为
var res = await Rep_App.NewRemember(remember);
if (res)
{
MessageBox.Show("Success");
using(var dbContext = new DataBaseContext(PublicVariables.ConnectionString))
{
remembersBindingSource.DataSource = await dbContext.Remembers.ToListAsync();
}
}
else
{
MessageBox.Show("...");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.