Winforms 更新主UI线程上控件的正确方法是什么

Winforms 更新主UI线程上控件的正确方法是什么,winforms,c#-4.0,task-parallel-library,Winforms,C# 4.0,Task Parallel Library,在我的C#winforms应用程序中,我在后台使用Task从数据库加载数据,下面是我的代码。但在上传数据后,我正在更新绑定源的UI控件。此BindingSource组件连接到DataGrid,DataGrid也将更新 我需要知道的是,我所做的是正确的方式,还是有其他更好的方式来实现同样的目标 private async void Form_Load(object sender, EventArgs e) { Task loadDataTask = Task.Factory.StartNe

在我的C#winforms应用程序中,我在后台使用Task从数据库加载数据,下面是我的代码。但在上传数据后,我正在更新绑定源的UI控件。此BindingSource组件连接到DataGrid,DataGrid也将更新

我需要知道的是,我所做的是正确的方式,还是有其他更好的方式来实现同样的目标

private async void Form_Load(object sender, EventArgs e)
{
    Task loadDataTask = Task.Factory.StartNew(() =>
    {
       // LoadData(); // loading the data from the database
    });

    await loadDataTask.ConfigureAwait(true);

    FormBindingSource.DataSource = _businessObjecsCollection;
}

若您负担得起,那个么让加载数据的方法成为异步的。然后,您可以将表单方法更改为:

private async void Form_Load(object sender, EventArgs e)
{
    await LoadDataAsync();

    FormBindingSource.DataSource = _businessObjecsCollection;
}
甚至可能

private async void Form_Load(object sender, EventArgs e)
{        
    FormBindingSource.DataSource = await LoadDataAsync();
}

否则,当前的方法看起来很好

如果您负担得起,请使加载数据的方法异步。然后,您可以将表单方法更改为:

private async void Form_Load(object sender, EventArgs e)
{
    await LoadDataAsync();

    FormBindingSource.DataSource = _businessObjecsCollection;
}
甚至可能

private async void Form_Load(object sender, EventArgs e)
{        
    FormBindingSource.DataSource = await LoadDataAsync();
}

否则,当前的方法似乎很好

请注意,在表单显示给用户之后,
DataGrid
可能会被加载。@RezaAghaei,您提出的问题很好。我将尝试采用这种方法。请注意,
DataGrid
可能会在表单显示给用户后加载。@RezaAghaei,您提出的问题很好。我将尝试采用这种方法。