繁体   English   中英

异步任务未运行 - c#

[英]Async task didn't run - c#

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("...");
                }
            }
        }

获取记忆方法:

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() 没有在 Save Event 中执行,但是当表单加载时 GetRemember() 完全执行,这是怎么回事?

问题是ConfigureAwait(false)ContinueWith引起的。 ConfigureAwait(false)将导致在后台线程上继续执行,而不是返回到 UI。 也不需要LoadAsync ,数据将由ToListToListAsync()加载。

EF Core 和 async/await 不需要那么多代码。 所有这些都可以替换为

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