在 C# 中操作 DataGridView 控件的线程方法有两种:

  1. 使用 Invoke 方法

在线程中操作 UI 控件是非法的,因此我们需要使用 Invoke 方法将 UI 操作委托到 UI 线程中执行。以下是一个示例:

private void UpdateDataGridView(object obj)
{
    // 获取数据集
    List<Data> dataList = (List<Data>)obj;
    
    // 使用 Invoke 方法更新 DataGridView
    if (dataGridView1.InvokeRequired)
    {
        dataGridView1.Invoke(new Action(() =>
        {
            dataGridView1.Rows.Clear();
            foreach (Data data in dataList)
            {
                dataGridView1.Rows.Add(data.Name, data.Age, data.Gender);
            }
        }));
    }
    else
    {
        dataGridView1.Rows.Clear();
        foreach (Data data in dataList)
        {
            dataGridView1.Rows.Add(data.Name, data.Age, data.Gender);
        }
    }
}

在上面的示例中,我们使用 Invoke 方法将 DataGridView 的更新操作委托给 UI 线程执行。如果当前线程不是 UI 线程,则使用 Invoke 方法,否则直接执行更新操作。

  1. 使用 BackgroundWorker 组件

BackgroundWorker 是一个可以在后台执行任务的组件,它可以帮助我们在后台线程中执行耗时的操作,同时还可以方便地更新 UI 控件。以下是一个示例:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // 获取数据集
    List<Data> dataList = (List<Data>)e.Argument;
    
    // 更新 DataGridView
    dataGridView1.Rows.Clear();
    foreach (Data data in dataList)
    {
        dataGridView1.Rows.Add(data.Name, data.Age, data.Gender);
    }
}

private void UpdateDataGridView(List<Data> dataList)
{
    // 设置 BackgroundWorker 的参数
    backgroundWorker1.RunWorkerAsync(dataList);
}

在上面的示例中,我们将 DataGridView 的更新操作放在 BackgroundWorker 的 DoWork 事件处理程序中。在 UpdateDataGridView 方法中,我们调用 RunWorkerAsync 方法来启动 BackgroundWorker,并将需要更新的数据集作为参数传递给它。在 DoWork 事件处理程序中,我们可以使用 e.Argument 属性获取传递的参数,并在其中执行 DataGridView 的更新操作。在更新操作完成后,BackgroundWorker 会自动触发 RunWorkerCompleted 事件,在该事件处理程序中可以进行一些清理工作。

C# 线程操作 DataGridView 控件:Invoke 和 BackgroundWorker 详解

原文地址: https://www.cveoy.top/t/topic/nYYP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录