简体   繁体   English

异步任务未运行 - c#

[英]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 ,数据将由ToListToListAsync()加载。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM